본문 바로가기
코딩테스트

[백준] 10810번 공 넣기 - Kotlin(코틀린)

by Glion 2025. 4. 11.
반응형

10810번 공 넣기

문제 분석

바구니의 갯수는 N, 각각 바구니에서는 1번부터 N 번까지 번호가 매겨져 있다고 했다.

바구니들을 배열로 지정했을때 배열의 크기는 N, 바구니의 번호는 index + 1 형태이다.

또한 공이 들어있지 않은 바구니는 0을 출력하므로 바구니 배열의 초기값을 0으로 초기화 시켜줄 것이다.

 

바구니에는 공을 1개만 넣을 수 있다고 했기 때문에 공을 넣을때 바구니 배열 내의 값을 덮어씌워주면 된다.

 

M 번 공을 넣는다고 했기 때문에 M 번 반복해서 공을 넣는 작업을 진행해야 하고, 바구니 범위에 동일한 번호의 공을 넣는다고 하니배열 내 특정 범위에 모두 같은 값을 넣어주는 작업을 진행하게 될 것이다.

 

N의 수 범위와 M 의 수 범위는 Int 형으로 표현할 수 있을 것이고,

 

공을 넣는 방법 i, j 는 바구니의 범위 시작, 끝. k 는 공의 번호로써 M 번 반복하며
입력 -> 바구니 범위에 공 넣기 -> 입력 -> 바구니 범위에 공 넣기 ... 작업을 진행해야 한다.

 

정답 코드
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() {
    BufferedReader(InputStreamReader(System.`in`)).use { br ->
        val (basketCount, ballCount) = br.readLine().split(" ").map { it.toInt() }
        val basketArray = Array(basketCount, {0})
    
        repeat(ballCount) {
            val (start, end, ballNumber) = br.readLine().split(" ").map { it.toInt() }

            (start .. end).forEach { i ->
                basketArray[i - 1] = ballNumber 
             }
        }
        
        println(basketArray.joinToString(" "))
    }
}

 

Deatil

 

  • use
    • BufferedReader 에 use 문을 사용하여 블록 안에서 BufferedReader 를 사용하고, 블럭 밖으로 나가면 자동으로 해제시켜준다.
    • BufferedReader.close() 가 자동으로 호출되며, 예외가 발생해도 안전하게 자원을 정리할 수 있다는 장점이 있다.
  • joinToString(separator, prefix, postfix, limit, truncated)
    • 배열이나 리스트의 내용을 출력할 경우 joinToString(separator, prefix, postfix, limit, truncated) 문을 사용한다.
    • 배열이나 리스트의 원소로 문자열을 만들어주는 함수로서, 각 인자의 역할은
      • separator : 원소간 연결 시 사이에 들어갈 문자열
      • prefix : 만들 문자열에서 시작할 문자열
      • postfix : 만들 문자열에서 종료할 문자열
      • limit : 몇개까지만 합칠지 지정
      • truncated : limit 로 인해 보여주지 못한 문자열이 있으면 어떻게 보여줄지 정한다. 지정하지 않을 시 "..." 으로 표시된다
    • 예시
val list = listOf("A", "B", "C", "D", "E")
println(list.joinToString("-", "start ", " end", 3, "XXX"))

// 출력 : start A-B-C-XXX end

 

  • repeat
    • repeat(N) { ... } 으로 사용하여 N 회만큼 {  } 의 내용을 반복적으로 수행한다.
    • for(i in 1 ... N) 와 동일하다. 더 편하게 사용할 수 있다.
  • 람다를 이용한 array 기본값 초기화
    • kotlin 에서 배열을 지정할때, 기본적으로 아래와 같이 사용한다.
      val tempArray = Array(size) { value }
      이렇게 하게 되면, tempArray 는 size 만큼의 배열 크기를 가지고, value 로 초기값이 지정된다.
    • Array(size) { index ->  }
      index 를 사용하여, 각 인덱스별로 초기값을 지정할 수 있다.
    • 이 문제에서는 공이 들어있지 않은 바구니를 0 으로 출력한다고 했고, 가장 처음 바구니에는 아무것도 들어있지 않으니
      val basketArray = Array(N) { 0 } 으로 사용했다.
반응형