해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/42628
풀이 : PriorityQueue를 2개로 사용하여 최대, 최소를 체크한다.
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue <Integer> max = new PriorityQueue<Integer> ((a,b) -> b-a);
PriorityQueue <Integer> min = new PriorityQueue<Integer> ((a,b) -> a-b);
int [] ans = new int[2];
for (int i = 0; i < operations.length; i++) {
String [] arr = operations[i].split(" ");
if(arr[0].equals("I")) {
max.add(Integer.parseInt(arr[1]));
min.add(Integer.parseInt(arr[1]));
}else {
if(max.isEmpty() || min.isEmpty()) continue;
if(arr[1].equals("1")) {
int n = max.poll();
min.remove(n);
}else {
int n = min.poll();
max.remove(n);
}
}
}
if(!max.isEmpty()) ans[0] = max.peek();
if(!min.isEmpty()) ans[1] = min.peek();
return ans;
}
}