본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 이중우선순위큐

by 현장 2026. 1. 18.

-Code

import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        // 우선 순위 큐로 오름차순과 내림차순 2개 관리
        PriorityQueue<Integer> naturalQueue = new PriorityQueue<>();
        PriorityQueue<Integer> reverseQueue = new PriorityQueue<>(Comparator.reverseOrder());
        // 명령어 받기
        for (String operation : operations) {
            StringTokenizer st = new StringTokenizer(operation);
            String comm = st.nextToken();
            int num = Integer.parseInt(st.nextToken());
            
            if (comm.equals("I")) {
                // I면 입력 받기
               naturalQueue.add(num);
               reverseQueue.add(num);
            } else {
                // D이면서 1이면 max, -1이면 min값 삭제
               if (num == 1 && !reverseQueue.isEmpty()) {
                   int pollNum = reverseQueue.poll();
                   naturalQueue.remove(pollNum);
               } else if (num == -1 && !naturalQueue.isEmpty()) {
                   int pollNum = naturalQueue.poll();
                   reverseQueue.remove(pollNum);
               }
            }
        }
        
        int[] answer = {0, 0};
        // 우선순위 큐가 비어있지 않으면 값 저장
        if (!naturalQueue.isEmpty() && !reverseQueue.isEmpty()) {
            answer[0] = reverseQueue.poll();
            answer[1] = naturalQueue.poll();
        }
        return answer;
    }
}

우선순위 큐여서 1개로 관리가 되나 했지만 좀 찾아보니 2개로 두면 된다는 것을 힌트로 얻고 해결했습니다.