본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 2309 일곱 난쟁이 (코틀린)

by ESHC 2021. 5. 10.

[문제]

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

[코드]

import java.io.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val list = mutableListOf<Int>()
    val arr = Array(100){ 0 }
    for(i in 0..8) {
        val a = br.readLine().toInt()
        list.add(a)
        arr[a] = i
    }
    val sum = list.sum()
    val array = Array(9) { i -> sum-list[i] }
    val result = mutableListOf<Int>()
    for(i in 0..8){
        if(arr[array[i]-100] > 0 ) {
            for (j in 0..8) {
                if (j != i && j != arr[array[i] - 100])
                    result.add(list[j])
            }
            break
        }
    }
    result.sort()
    result.forEach{
        bw.write("$it\n")
    }
    bw.flush()
    bw.close()
}

[풀이]

배열에 난쟁이의 키를 인덱스로 하여 난쟁이 순서 값을 저장하고

List에는 순서대로 난쟁이 키만 저장하였다.

난쟁이 키의 총합에서 각 순서에 맞게 키 값을 뺀 값을 새로운 배열에 저장하고

새로운 배열에서 각각 100을 뺀 값이 처음 배열의 인덱스로 하여 그 배열값이 0보다 크면 해당하는 값이 있다는 뜻이기 때문에 해당하는 수들을 결과 list에 저장하여 정렬 후 출력하였다.

 

Github : https://github.com/eshc123/2021AlgorithmStudy/blob/main/src/main/PS/baekjoon/2309.kt

댓글