어제의 나보다 성장한 오늘의 나

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

알고리즘/프로그래머스(Programmers)

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

NineOne 2020. 12. 25. 00:09

programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

문제풀이

우선순위큐를 각각 최대, 최소로 선언한다.

삽입할 때는 최대우선순위큐 (maxPQ) 와 최소우선순위큐(minPQ)에 둘다 넣어준다.

D 일때는 삭제인데 우선순위큐가 비어 있다면 무시해준다.

"1" 일대 최대값 삭제임으로 maxPQ에서 삭제 시켜주고 minPQ에도 해당 값이 사라져야 되기 때문에 remove해주었다.

마지막으로 size가 2개 이상일때 즉 최솟값과 최댓값이 둘다 존재할때만 answer배열에 저장하여 return 해주었다.

 

코드

import java.util.*;

class Solution {
    PriorityQueue<Integer> maxPQ = new PriorityQueue<Integer>(Collections.reverseOrder());
    PriorityQueue<Integer> minPQ = new PriorityQueue<Integer>();
    int max, min;
    
    public int[] solution(String[] operations) {
        int[] answer = new int[2];
        
        for(int i =0; i<operations.length; i++){
            String[] temp = operations[i].split(" ");
            //삽입 일때 둘다 삽입
            if(temp[0].equals("I")){
                int t = Integer.parseInt(temp[1]);
                maxPQ.add(t);
                minPQ.add(t);
            }
            //삭제
            else{
                if(maxPQ.size() == 0 || minPQ.size() == 0) continue;
                    
                if(temp[1].equals("1")){
                    max = maxPQ.poll();
                    minPQ.remove(max);
                }
                else{
                    min = minPQ.poll();
                    maxPQ.remove(min);
                }
            }
            
        }
        
        if(maxPQ.size() >1) {
            answer[0] = maxPQ.poll();
            answer[1] = minPQ.poll();
        }
        
        return answer;
    }
}
Comments