본문 바로가기
자료구조&알고리즘

[자료구조] Kotlin으로 자료구조 이해하기 - PriorityQueue(우선순위 큐)

by JongSeok 2023. 2. 9.

PriorityQueue

PriorityQueue(우선순위 큐)는 Queue처럼 선입선출(FIFO)의 구조를 갖출 것 같지만 그렇지 않고 내부적으로 이진트리의 형식을 갖추고 있기 때문에 오름차순 혹은 내림차순으로 데이터를 저장합니다.

 

따라서 일반적인 Queue(큐)는 가장 먼저 들어간 데이터가 가장 먼저 나오는 방식이지만 PriorityQueue(우선순위 큐)는 들어간 순서에 관계없이 오름차순의 경우 가장 작은 값이, 내림차순의 경우 가장 작은 큰 값이 반환되는 방식입니다.

 

우선순위 큐의 데이터에 접근하는 방법은 큐와 유사하며 이전 포스팅에서 확인할 수 있습니다.

사용예시와 함께 자세히 알아보겠습니다.

 

[자료구조] Kotlin으로 자료구조 이해하기 - Queue(큐)

Queue Queue의 사전적 정의는 '줄, 줄을 서서 기다리다'라는 의미를 갖습니다. 자료구조로서 Queue는 선입선출(FIFO : First In First Out)의 방식으로 데이터를 저장하는 구조를 의미합니다. 예를 들어, 빈 Q

develop-oj.tistory.com


사용예시

import java.util.*

fun main() {
    // 오름차순 우선순위 큐
    val pq = PriorityQueue<Int>()
    // 내림차순 우선순위 큐
    val pq2 = PriorityQueue<Int>(Collections.reverseOrder())

    // 삽입 및 우선순위 값 확인
    pq.add(1)
    pq.add(4)
    pq.add(3)
    pq.add(2)
    pq.add(5)

    println(pq)    // [1, 2, 3, 4, 5]
    println(pq.peek())    // 1
    
    // 삽입 및 우선순위 값 확인
    pq2.add(1)
    pq2.add(2)
    pq2.add(5)
    pq2.add(4)
    pq2.add(3)

    println(pq2)    // [5, 4, 2, 1, 3]
    println(pq2.peek())    // 5

    // 삭제
    println("${pq.poll()}, $pq")    // 1, [2, 4, 3, 5]
    println("${pq2.poll()}, $pq2")    // 5, [4, 3, 2, 1]

    println(pq.size)    // 4

    // 큐 비우기
    while (pq.isNotEmpty()) {
        println(pq.poll())    // 2, 3, 4, 5
    }
}
728x90
반응형