본문 바로가기
Algorithm/📖Baekjoon

#8979 올림픽

by yewoneeee 2024. 7. 26.

문제


 

코드


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++과 달라서 좀 헷갈렸다.

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

 

 

 

'Algorithm > 📖Baekjoon' 카테고리의 다른 글

#20125 쿠키의 신체 측정  (0) 2024.07.29
#7568 덩치  (0) 2024.07.26
#9655 돌 게임  (0) 2024.07.25
#11723 집합  (0) 2024.07.25
#1157 단어 공부  (0) 2024.07.23

댓글