[백준] 11286번 절댓값 힙

Greenddoovie·2021년 12월 19일
0

백준

목록 보기
12/30

11286번 절댓값 힙

접근 방법

Prioirity Queue의 값 비교 방식을 Custom Comparator를 이용하였다.
이전 최소힙, 최대힙 문제에서 heap을 구현한 적이 있다.
일반적으로 priority queue를 이용해서 heap을 구현하는데, 이전에 구현했을 때는 comparator를 사용하지 않았다.
이전에 구현한 heap에 comparator를 사용해서 구현하는 방법으로 개선해볼 수 있을 것 같다.

코드

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*


class IO11286 {
    private val br = BufferedReader(InputStreamReader(System.`in`))
    private val bw = BufferedWriter(OutputStreamWriter(System.out))

    fun getInt(): Int = br.readLine().toInt()
    fun flush() = bw.flush()
    fun close() = bw.close()
    fun write(message: String) = bw.write(message)
}

fun main() {
    val io = IO11286()
    val count = io.getInt()

    val abs = { num: Int -> if (num <0) -num else num }

    val pq = PriorityQueue<Int>{ a,b ->
        when {
            abs(a) > abs(b) -> 1
            abs(a) < abs(b) -> -1
            else -> when {
                a > b -> 1
                a < b -> -1
                else -> 0
            }
        }
    }
    repeat(count) {
        val num = io.getInt()
        if (num == 0) {
            io.write( if (pq.isEmpty()) "0\n" else "${pq.poll()}\n")
        } else {
            pq.offer(num)
        }
    }

    io.apply {
        flush()
        close()
    }
}
profile
기초를 이해하면 세상이 다르게 보인다

0개의 댓글