프로그래머스 - 이중 우선순위 큐 - PriorityQueue - Java

chaemin·2024년 5월 21일
0

프로그래머스

목록 보기
49/64

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42628

2. 풀이

PriorityQueue를 min, max값을 담는 걸로 두개 작성해서
최대값 뺄때는 maxQ.poll(), 최솟값을 뺄때는 minQ.poll을 한다.

🚨 하나의 queue가 다 비게되면 나머지 queue도 clear해줘야한다.

3. 코드

import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> minQ = new PriorityQueue<>();
        PriorityQueue<Integer> maxQ = new PriorityQueue<>((a, b) -> b - a);
        int size = 0;
        
        for(String operation : operations){
            String[] op = operation.split(" ");
            switch(op[0]){
                case "I" -> {
                    minQ.add(Integer.parseInt(op[1]));
                    maxQ.add(Integer.parseInt(op[1]));
                    size++;
                }
                    
                case "D" -> {
                    if(op[1].equals("1")){
                        if(maxQ.size() == 0) continue;
                        maxQ.poll();
                        if(--size == 0){
                            minQ.clear();
                            maxQ.clear();
                        }
                    } else{
                        if(minQ.size() == 0) continue;
                        minQ.poll();
                        if(--size == 0){
                            minQ.clear();
                            maxQ.clear();
                        }
                    }
                }
            }
        }
        
        int[] answer = new int[2];
        answer[0] = (maxQ.size() == 0) ? 0 : maxQ.peek();
        answer[1] = (minQ.size() == 0) ? 0 : minQ.peek();
        
        return answer;
    }
}

0개의 댓글