[프로그래머스] 이중우선순위큐 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/42628
입력 : 이중 우선순위 큐가 할 연산 String[] operations (1 ≤ operations.length ≤ 1,000,000)
출력 : 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]
O(n)
우선순위 큐
없음
없음
offer(E e) : 지정된 요소를 우선순위 큐에 삽입한다.
poll() : 우선순위 큐의 헤드를 제거하고 반환한다.
peek() : 우선순위 큐의 헤드를 제거하지 않고 반환한다.
구현
import java.util.*;
public class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
for (String operation : operations) {
String[] parts = operation.split(" ");
String command = parts[0];
int value = Integer.parseInt(parts[1]);
if (command.equals("I")) {
minHeap.offer(value);
maxHeap.offer(value);
} else if (command.equals("D")) {
if (value == 1) {
if (!maxHeap.isEmpty()) {
int max = maxHeap.poll();
minHeap.remove(max);
}
} else if (value == -1) {
if (!minHeap.isEmpty()) {
int min = minHeap.poll();
maxHeap.remove(min);
}
}
}
}
if (minHeap.isEmpty()) {
return new int[] {0, 0};
} else {
return new int[] {maxHeap.peek(), minHeap.peek()};
}
}
}