본문 바로가기
Problem Solving

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

by JYHAN 2021. 1. 3.

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

[풀이]

예시

예시 Pic1과 같이 Max Queue, Min Queue를 만든 후 입력에 따라 삭제한다.

주의할 점은 한쪽 큐에서 값을 꺼낼 때, 다른 큐에서도 삭제를 해주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;
class Solution {
    public int[] solution(String[] opts) {
        Queue<Integer> minQ = new PriorityQueue<Integer>();
        Queue<Integer> maxQ = new PriorityQueue<Integer>(Collections.reverseOrder());
        int size = 0;
        for(int i=0; i<opts.length; i++){
            char opt = opts[i].split(" ")[0].charAt(0);
            int num = Integer.parseInt(opts[i].split(" ")[1]);
            if(opt == 'I'){ // 큐에 삽입
                maxQ.add(num);
                minQ.add(num);
                size++;
            }else if(size>0){  // 큐에서 제거
                System.out.print(num+" ");
                if(num == -1){ // 최솟값 삭제
                    maxQ.remove(minQ.poll());
                }else{         // 최댓값 삭제
                    minQ.remove(maxQ.poll());
                }
                size--;
            }
        }
        int[] answer = new int[2];
        if(size>1){
            answer[0= maxQ.poll();
            answer[1= minQ.poll();
        }else if(size==1){
            answer[0= answer[1= maxQ.poll();
        }
        return answer;
    }
}
cs

댓글