[programmers] 이중우선순위큐

JongSeong Yang·2021년 5월 24일
0

programmers

목록 보기
14/16

문제 풀이 : 2021.05.14

풀이

최댓값과 최솟값 각각에 대한 우선순위큐를 만들고, 삽입과 삭제를 각각에 대해 처리해준다.
peek 함수로 최대/최소값을 찾고 찾은 값을 remove함수로 삭제
마지막에 empty가 아니면 배열에 담아서 반환한다.

코드

import java.util.*;
class Solution {
    static PriorityQueue<Integer> pq1 = new PriorityQueue<>();
    static PriorityQueue<Integer> pq2 = new PriorityQueue<>(Collections.reverseOrder());
    
    public int[] solution(String[] operations) {
        int[] answer = new int[2];
        for(String s : operations){
            String tmp[] = s.split(" ");
            if(tmp[0].equals("I")){
                int add = Integer.parseInt(tmp[1]);
                pq1.offer(add);
                pq2.offer(add);
                System.out.print(add+" ");
            }
            else if(tmp[0].equals("D")){
                if(!pq1.isEmpty()){
                    if(tmp[1].equals("1")){
                        int delete = pq2.peek();
                        pq1.remove(delete);
                        pq2.remove(delete);
                        System.out.print(delete+" ");
                    }
                    else{
                        int delete = pq1.peek();
                        pq1.remove(delete);
                        pq2.remove(delete);
                        System.out.print(delete+" ");
                   }
                }
            }
        }
        if(!pq1.isEmpty()){
            answer[1] = pq1.peek();
            answer[0] = pq2.peek();
        }
              
        return answer;
    }
}

문제 출처 링크

profile
꿈꾸는 개발자

0개의 댓글