본문 바로가기
ALGORITHMS/THEORY

[JAVA] PriorityQueue : 우선순위 큐

by alasdkfm 2023. 5. 25.

목차

    우선순위 큐?

    • GREEDY알고리즘 문제는 정렬 아니면 우선순위 큐 문제일 정도로 자주 쓰이는 자료구조.
    • 일반적인 QUEUE처럼, 데이터가 들어온 순서대로 나가는 것이 아니라, 우선순위가 높은 데이터가 먼저 출력되는 자료구조.
    • 우선순위 큐는 힙으로 구현 가능한데, 최소값 우선큐 = 최소힙 & 최대값 우선큐 = 최대힙
    • O(logn) 의 시간복잡도

     

    알고리즘

    삽입 알고리즘

    큐에 값이 삽입되면 다음과 같이 진행된다

    출처 : [Java] PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리[코딩팩토리]

     

    삭제 알고리즘

    출처 : [Java] PriorityQueue(우선순위 큐) 클래스 사용법 & 예제 총정리[코딩팩토리]

     

    활용

    선언

    import java.util.PriorityQueue;
    import java.util.Collections;
    // 선언
    PriorityQueue< [자료 타입] > [변수명] = new PriorityQueue<>(); 
    
    -- 예시 
    // int 타입 + 낮은 숫자가 우선순위를 가지는 큐 
    PriorityQueue<Integer> queue = new PriorityQueue<>(); 
    
    // int 타입 + 큰 숫자가 우선순위를 가지는 큐 
    PriorityQueue<Integer> largest_queue = new PriorityQueue<>(Collections.reverseOrder()); 
    
    

     

    삽입 : add ( ) , offer( )

    queue .add(1);
    queue .add(2);
    queue .offer(3);
    
    largest_queue .add(1);
    largest_queue .add(2);
    largest_queue .offer(3);
    

     

    삭제 : poll( ), remove( ) , clear( )

    // 현재 큐에 상태 = [1,2,3]
    
    // 첫번째 값을 반환후 제거. 비어있다면 null (pop과 비슷) 
    queue .poll();    // 1반환  (1,2,3) 순으로 반환 
    largest_queue .poll();    // 3반환 (3,2,1) 순으로 반환
    
    // 첫번째 값 제거. 큐가 비어있다면 예외 발생
    queue .remove(); 
    queue .remove(int Index) // Index 순위에 해당하는 값을 제거
    
    // 초기화
    queue .clear();
    

     

    참조( 반환O, 제거 x ) : peek( ) , element( )

    // 첫번째 값을 참조. 큐가 비어있다면 null을 반환
    queue .peek();   
    
    // 첫번째 값을 참조. 큐가 비어있다면 예외 발생
    queue .element();  
    

     

    크기 : size( )

    queue .size();   // 3 반환

     

    Priority Queue 값 출력

    System.out.print(lowest_queue);
    ---
    Iterator iterator = lowest_queue .iterator();
    while(iterator.hasNext())
    	System.out.print(iterator.next() + " ");

     

    참조 

    [JAVA] Priority Queue(우선순위 큐) 개념 및 사용법 정리 (tistory.com)

    https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%ED%81%90

    'ALGORITHMS > THEORY' 카테고리의 다른 글

    [PYTHON] PriorityQueue, heapq  (0) 2023.05.25
    약수 효율적으로 찾기  (0) 2022.11.23