본문 바로가기
스터디(beakjoon)

Kotlin] 백준 3003번 문제풀이

by 김마리님 2023. 6. 2.

https://www.acmicpc.net/problem/3003

 

3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰

첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

풀이

더보기

문제의 핵심은 >> 필요한 것 << 이 몇개인지 찾는 것이다.

즉, 원래 있어야 하는 기준 배열 - 창고에서 찾은 배열을 뺐을 때, 몇 개가 필요한지 알 수 있다.

예를 들어 있어야 하는 기준 배열이

킹 1개 퀸 1개 룩 2개 나이트 2개 비숍 2개 폰 8개

[1, 1, 2, 2, 2, 8]

창고에서 찾은 배열이

킹 1개 퀸 0개 룩 3개, 나이트 1개 비숍 4개 폰 8개라고 하자.

[1, 0, 3, 1, 4, 8]

 

이를 빼보면

   [1, 1, 2, 2, 2, 8]

- [1, 0, 3, 1, 4, 8]

---------------------

   [0, 1, -1, 1, -2, 0]

 

이 된다. 따라서, 기준 배열을 for 문을 돌려 같은 인덱스의 창고배열을 빼서 새 배열을 만들고, 이를 joinToString을 통해 합쳐 새 문자열로 만들러 리턴하면 된다.

 

fun main(args: Array<String>) {
    question3003()
}

fun question3003() {
    var chess = arrayListOf<Int>(1, 1, 2, 2, 2, 8)
    var list = readLine()!!.split(" ").map { it.toInt() }

    var part = mutableListOf<Int>()

    chess.forEachIndexed { index, i ->
        part.add(i - list[index])
    }

    println(part.joinToString(" "))
}
반응형