Lewis's Tech Keep

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

Java/알고리즘

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

Lewis Seo 2021. 1. 29. 13:59

우선순위 큐의 min, max 값을 그냥 이용하기만 하면 됐던 문제

 

maxHeap -> min 은 maxHeap의 가장 마지막 값

min 값 뽑아내는 과정이 조금 마음에 들지 않지만 나중에 이 부분은 한번 더 해보자

 

더보기
import java.util.*;
class Solution {
    static int findMinimumElement(PriorityQueue<Integer> maxHeap) {
        int min = maxHeap.peek();
 
        for(Integer num: maxHeap) {
            if(min > num) {
                min = num;
            }
        }
        maxHeap.remove(min);
 
        return min;
    }
    public int[] solution(String[] operations) {
        int[] answer = new int[2];
        PriorityQueue<Integer> maxHeap= new PriorityQueue<>((a,b)->b-a);
        for(String operation: operations) {
            String command = operation.split(" ")[0];
            int num = Integer.parseInt(operation.split(" ")[1]);
            if(command.equals("I")) {
                maxHeap.offer(num);
            } else if(maxHeap.size() > 0 && command.equals("D")) {
                if(num == 1) {
                    // 최대값 삭제
                    maxHeap.poll();
                    // System.out.println(maxHeap.poll());
                } else if (num == -1) {
                    // 최소값 삭제
                    findMinimumElement(maxHeap);
                    // System.out.println(findMinimumElement(maxHeap));
                }
            }
        }
        int heapSize = maxHeap.size();
        if(heapSize > 1) {
            answer[0] = maxHeap.peek();
            answer[1] = findMinimumElement(maxHeap);   
        }

        return answer;
    }
}
Comments