[kotlin] 우선순위 큐(Priority Queue)의 사용 방법

우선순위 큐는 데이터가 우선순위에 따라 처리되는 자료구조로, 가장 높은 우선순위를 가진 데이터가 가장 먼저 처리됩니다.

코틀린에서는 PriorityQueue 클래스를 사용하여 우선순위 큐를 구현할 수 있습니다.

우선순위 큐(Priority Queue) 생성

우선순위 큐를 사용하려면 먼저 PriorityQueue를 생성해야 합니다. 아래는 PriorityQueue를 사용하여 우선순위 큐를 생성하는 예제입니다.

import java.util.PriorityQueue

fun main() {
    val priorityQueue = PriorityQueue<Int>()

    // 우선순위 큐에 요소 추가
    priorityQueue.add(3)
    priorityQueue.add(1)
    priorityQueue.add(2)

    // 우선순위가 높은 순서대로 요소 출력
    while (priorityQueue.isNotEmpty()) {
        println(priorityQueue.poll())
    }
}

위의 코드에서는 PriorityQueue에 정수형 데이터를 추가하고, poll 함수를 사용하여 우선순위가 가장 높은 순서대로 요소를 출력합니다.

우선순위 큐(Priority Queue) 사용하기

우선순위 큐는 데이터를 추가할 때마다 내부적으로 우선순위를 정렬하므로, 데이터를 꺼낼 때 항상 우선순위가 가장 높은 데이터가 추출됩니다.

또한, PriorityQueue는 기본적으로 자연 순서(natural order)를 따르지만, 우선순위 큐를 생성할 때 Comparator를 지정하여 새로운 우선순위 규칙을 정의할 수도 있습니다.

import java.util.PriorityQueue

fun main() {
    val maxHeap = PriorityQueue<Int>(compareBy { -it }) // 최대 힙
    val minHeap = PriorityQueue<Int>() // 최소 힙

    maxHeap.addAll(listOf(3, 1, 2))
    minHeap.addAll(listOf(3, 1, 2))

    println("Max Heap:")
    while (maxHeap.isNotEmpty()) {
        println(maxHeap.poll())
    }

    println("Min Heap:")
    while (minHeap.isNotEmpty()) {
        println(minHeap.poll())
    }
}

위의 코드에서는 Comparator를 사용하여 최대 힙과 최소 힙을 구현하고, 우선순위 큐에 데이터를 추가한 후에는 우선순위가 높은 순서대로 데이터를 출력합니다.

요약

코틀린의 PriorityQueue를 사용하여 우선순위 큐를 구현하고, 우선순위가 높은 순서대로 데이터를 처리하는 방법을 알아보았습니다. 우선순위 큐는 다양한 알고리즘과 데이터 구조에서 유용하게 활용될 수 있습니다.

더 많은 정보는 Java PriorityQueue documentation를 참고하시기 바랍니다.

재미있는 코딩되세요! 🚀