🔑두개의 우선순위큐를 선언하여, 최댓값과 최솟값을 고를수 있어야한다.
String[] arr = {"I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"};
int[] answer = new int[2];
//메인 큐
PriorityQueue<Integer> pq = new PriorityQueue<>();
//서브 큐
PriorityQueue<Integer> pqr = new PriorityQueue<>(Collections.reverseOrder());
for (int i =0; i<arr.length ; i++){
//구분자 이용
StringTokenizer st = new StringTokenizer(arr[i]," ");
//부호
String a = String.valueOf(st.nextElement());
//숫자
String b = String.valueOf(st.nextElement());
//인서트인 경우, 메인큐에 삽입후, 서브큐 초기화 후 인서트
if (a.equals("I")) {
pq.add(Integer.parseInt(String.valueOf(b)));
pqr.clear();
for (Integer l : pq) pqr.add(l);
}
//최솟값 삭제 시, 메인큐 poll()
if (a.equals("D") && b.equals("-1")) pq.poll();
//최댓값 삭제 시, 서브큐 초기화 후 메인큐 데이터 삽입 그리고 poll() 한 후 pq에 다시 서브큐 데이터 삽입
if (a.equals("D") && b.equals("1")){
pqr.clear();
for (Integer j : pq) pqr.add(j);
pqr.poll();
pq.clear();
for (Integer p : pqr) {
pq.add(p);
}
}
}
if (pq.size() == 0){
answer[0] = 0;
answer[1] = 0;
}
else{
answer[0] = pqr.poll();
answer[1] = pq.poll();
}
```![](https://velog.velcdn.com/images/laeho47/post/77784fab-3fe1-4aca-a4da-5e8e4b40878c/image.png)
![](https://velog.velcdn.com/images/laeho47/post/841f9d1c-3ee3-44c6-94ed-34e5be294cf2/image.png)