코딩테스트/BaekJoon

[Kotlin] BOJ_2562 최댓값

grove1212 2024. 10. 22. 21:14

문제 링크
https://www.acmicpc.net/problem/2562

list

list에는 두 가지 종류가 있다.
mutable list와 immutable list이다.

mutable list는 변경이 가능하다.
mutableListOf<Int>() 로 사용한다.
immutable list는
listOf 로 사용한다.

MutableList
이것은 인터페이스로, 무언가를 오버라이딩하고 싶을 때 사용할 수 있다. 더 자세한 내용은 코틀린 문법 공부를 진행하면서 배우려고 한다.

for

for문은 java와 다르게 for (i in 0..<9) 다음과 같이 사용 가능하다.

내 문제 풀이

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val numList = mutableListOf<Int>()
    for (i in 0..<9) {
        numList.add(br.readLine().toInt())
    }

    var max = 0
    for (i in 0..<9) {
        if (numList[max] < numList[i])
            max = i
    }

    println(numList[max])
    println(max + 1)
}

gpt 문제 풀이

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val numList = mutableListOf<Int>()

    // 9개의 정수를 입력받아 리스트에 저장
    repeat(9) {
        numList.add(br.readLine().toInt())
    }

    // 최대값과 그 인덱스를 찾기
    var maxIndex = 0
    for (i in 1 until 9) {
        if (numList[maxIndex] < numList[i]) {
            maxIndex = i
        }
    }

    // 최대값과 그 인덱스 + 1을 출력
    println(numList[maxIndex])
    println(maxIndex + 1)
}

코드 분석

repeat

for문 대신에 repeat(9)를 사용하여 더 직관적으로 반복횟수를 나타냈다. 앞으로 for문 대신에 반복은 repeat함수를 사용하는 것이 더 편할 것 같다.

for문 수정

for (i in 1 until 9) 1부터 9까지를 이렇게 표현했는데 모호하고 부정확한 표현이라고 생각된다.for문은 내가 생각한대로 하는게 맞다고 생각했다.

최적의 코드

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val numList = mutableListOf<Int>()

    // 9개의 정수를 입력받아 리스트에 저장
    repeat(9) {
        numList.add(br.readLine().toInt())
    }

    // 최대값과 그 인덱스를 찾기
    var maxIndex = 0
    for (i in 0..< 9) {
        if (numList[maxIndex] < numList[i]) {
            maxIndex = i
        }
    }

    // 최대값과 그 인덱스 + 1을 출력
    println(numList[maxIndex])
    println(maxIndex + 1)
}