문제 링크
문제 해설
힙은 우선순위 큐를 이용하여 구현하면 되지만 우선순위에 대해서 조금 생각해볼 수 있는 문제다. 기본적으로 수를 담는 우선순위 큐는 작은 수의 우선순위가 높은데, Kotlin에서는 람다식을 이용하여 손쉽게 우선순위를 변경할 수 있다. 따라서 우선순위 큐 객체를 생성할 때 절대값이 같은 경우에는 작은 수가, 그 외에는 절대값이 작은 수가 우선순위가 높아지도록 변경한 후 문제의 조건을 구현하면 된다.
Code
import java.util.PriorityQueue
import kotlin.math.abs
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
val heap = PriorityQueue<Int> { o1, o2 -> if (abs(o1) == abs(o2)) o1 - o2 else abs(o1) - abs(o2) }
var n: Int
repeat(readLine().toInt()) {
when (readLine().toInt().also { n = it }) {
0 -> bw.write(if (heap.isEmpty()) "0\n" else "${heap.poll()}\n")
else -> heap.add(n)
}
}
bw.close()
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 11866 : 요세푸스 문제 0 (1) | 2022.12.08 |
---|---|
[Kotlin] 백준 2563 : 색종이 (0) | 2022.12.07 |
[Kotlin] 백준 11723 : 집합 (0) | 2022.12.05 |
[Kotlin] 백준 5430 : AC (1) | 2022.12.04 |
[Kotlin] 백준 7662 : 이중 우선순위 큐 (1) | 2022.12.04 |
댓글