본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 11286 : 절댓값 힙

by 개발하는 곰돌이 2022. 12. 6.

문제 링크

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net


 


문제 해설

힙은 우선순위 큐를 이용하여 구현하면 되지만 우선순위에 대해서 조금 생각해볼 수 있는 문제다. 기본적으로 수를 담는 우선순위 큐는 작은 수의 우선순위가 높은데, 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

댓글