코딩 테스트/프로그래머스

프로그래머스 - 이중우선순위 큐 문제 (자바)

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

 

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

 

programmers.co.kr

 

오름차순의 우선순위 큐와 내리차순의 우선순위 큐를 만들고 연산에 따라서 두개의 큐를 셋팅

한쪽 큐에서 꺼낸값으로 remove를 하면 해당 값을 제거함(중복값 인 경우 한개 만 제거)

import java.util.Collections;
import java.util.PriorityQueue;

// 프로그래머스 이증우선순위 큐
class TwoPriorityQueue {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> maxQ = new PriorityQueue<>(Collections.reverseOrder());
        PriorityQueue<Integer> minQ = new PriorityQueue<>();
        for(String op : operations) {
            String[] ops = op.split(" ");
            String type = ops[0];
            int value = Integer.parseInt(ops[1]);

            if(type.equals("I")) {
                maxQ.offer(value);
                minQ.offer(value);
            }else {
                if(!minQ.isEmpty() && !maxQ.isEmpty()) {
                    if (value == 1) {
                        int target = maxQ.poll();
                        minQ.remove(target);
                    }else {
                        int target = minQ.poll();
                        maxQ.remove(target);
                    }
                }
            }
        }
        int max = 0;
        if(!maxQ.isEmpty()) {
            max = maxQ.poll();
        }

        int min = 0;
        if(!minQ.isEmpty()) {
            min = minQ.poll();
        }
        return new int[]{max, min};
    }
}