스터디(beakjoon)

Kotlin] 백준 2309 문제풀이

김마리님 2024. 4. 23. 10:21

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

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

 

 

더보기

이 문제의 속성은 브루트 포스 알고리즘이다.

 

근데 이걸.. 7명을 무식하게 매칭할 필요 없고.. 9명 중 두 명을 빼버리면 7명이 남으니까.. 그 남은 7명을 더하면 되는 간단한 문제이다.

 

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

fun question2309() {
    val array = Array(9) { 0 }

    for (i in 1 .. 9) {
        val person = readln().toInt()
        array[i - 1] = person
    }

    bigLoop@ for(i in 0 ..< array.count()) {
        for(j in 0 ..< array.count()) {
        // i와 j가 같으면 한 사람을 빼는 것과 같음
            if(i != j) {
                val copyList = array.copyOf()
                // 제외된 사람의 키를 0으로 만들어 합에서 제한다.
                copyList[i] = 0
                copyList[j] = 0
                if(copyList.sum() == 100) {
                    println(
                    // 리스트에서 0의 키를 제외하고 출력함
                        copyList.sorted().toList()
                            .mapNotNull { if(it == 0) null else it }
                            .joinToString("\n")
                    )
                    break@bigLoop
                }
            }
        }
    }

}

 

 

 

반응형