문제
코드
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 |
댓글