본문 바로가기
카테고리 없음

PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리

by nono22 2024. 1. 13.

PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리


1. PriorityQueue(우선순위 큐)란?

PriorityQueue는 자바에서 제공하는 우선순위 큐 자료구조를 구현한 클래스입니다. 이 클래스는 요소를 우선순위에 따라 정렬하여 처리하는 특징을 가지고 있습니다. 우선순위 큐는 일반적인 큐와 달리 요소를 삽입할 때 우선순위에 따라 정렬하여 삽입하며, 삭제할 때는 가장 우선순위가 높은 요소를 반환하게 됩니다.


2. 우선순위 큐의 사용법

2.1 우선순위 큐 생성 및 요소 추가

우선순위 큐를 사용하기 위해서는 먼저 PriorityQueue 클래스 객체를 생성해야 합니다. 생성자를 호출할 때는 우선순위 큐의 크기를 지정할 수도 있습니다. 만약, 크기를 지정하지 않은 경우에는 기본으로 11의 초기 용량을 갖는 우선순위 큐가 생성됩니다.

PriorityQueue<Integer> pq = new PriorityQueue<>();

우선순위 큐에 요소를 추가할 때는 add() 메소드를 사용합니다. 이 메소드는 요소를 큐에 추가한 뒤, 요소를 우선순위에 따라 정렬합니다.

pq.add(3);
pq.add(1);
pq.add(2);

위 코드를 실행하면, 우선순위 큐에 요소인 1, 2, 3이 추가되며, 내부적으로는 (1, 2, 3)이라는 순서로 정렬됩니다.


2.2 우선순위 큐의 요소 삭제

우선순위 큐에서 가장 우선순위가 높은 요소를 삭제하기 위해서는 poll() 메소드를 사용합니다. poll() 메소드는 우선순위가 가장 높은 요소를 반환하며, 동시에 해당 요소를 큐에서 삭제합니다.

int first = pq.poll();
System.out.println(first);  // 출력 결과: 1

위 코드를 실행하면, 가장 우선순위가 높은 요소인 1이 우선순위 큐에서 삭제되며, 출력 결과로 1을 확인할 수 있습니다.


2.3 우선순위 큐의 요소 접근

우선순위 큐에서 가장 우선순위가 높은 요소를 반환하기 위해서는 peek() 메소드를 사용합니다. peek() 메소드는 우선순위가 가장 높은 요소를 반환하지만, 다른 요소들은 삭제하지 않습니다.

int highestPriority = pq.peek();
System.out.println(highestPriority);  // 출력 결과: 2

위 코드를 실행하면, 가장 우선순위가 높은 요소인 2를 반환하지만, 우선순위 큐에서는 해당 요소가 삭제되지 않습니다.


3. PriorityQueue 예제 총정리

우선순위 큐를 사용하는 예제로, 정수 값들을 오름차순으로 정렬하는 문제를 해결해보겠습니다.

import java.util.PriorityQueue;

public class PriorityQueueExample {

    public static void main(String[] args) {
        int[] nums = { 9, 4, 2, 7, 5, 1, 3, 6, 8 };

        PriorityQueue<Integer> pq = new PriorityQueue<>();

        for (int num : nums) {
            pq.add(num);
        }

        while (!pq.isEmpty()) {
            System.out.print(pq.poll() + " ");
        }
    }
}

위 예제를 실행하면, 우선순위 큐에 숫자들이 추가되고, poll() 메소드를 이용하여 내부적으로 정렬된 값을 차례로 출력합니다. 따라서 출력 결과는 1 2 3 4 5 6 7 8 9가 됩니다.


참고 자료

댓글