Algorithm/📖Baekjoon

#8979 올림픽

yewoneeee 2024. 7. 26. 00:23

문제


 

코드


fun main() {
    val br = System.`in`.bufferedReader()
    val (n, k) = br.readLine().split(" ").map { it.toInt() }
    val input = Array(1001) { IntArray(3) }
    val medal = mutableListOf<List<Int>>()
    repeat(n) {
        val l = br.readLine().split(" ").map { it.toInt() }
        input[l[0]] = l.subList(1, 4).toIntArray()
        medal.add(l.subList(1, 4))
    }
    medal.sortWith(compareByDescending<List<Int>> { it[0] }.thenByDescending { it[1] }.thenByDescending { it[2] })
    var rank = 1
    for (i in medal) {
        if (!input[k].contentEquals(i.toIntArray())) rank ++
        else break
    }
    println(rank)
}

 

풀이


처음에 생각한 풀이 방법은 input을 따로 받아놓고, medal에 정렬하고 distinct를 적용해서 

k 나라의 메달이 medal 리스트에서 몇 번째 인덱스에 있는지를 출력하는 것이었다.

 

근데 이렇게 구현하니까 부분 성공만 되더라

문제를 다시 읽다가, 중복으로 공동 2등이 발생하면 그 다음 등수는 4등이 되어야 한다는 점에서 문제가 있음을 알았다.

위 방식대로 구현하면 3등으로 출력되기 때문이다.

 

그래서 k 나라보다 위에 있는 나라 개수를 직접 세기로 했음

이렇게 하니 성공했다

 

정렬이 기존에 사용하던 c++과 달라서 좀 헷갈렸다.

정렬에 대해 정리할 필요도 있어보인다.