문제 풀이 : 2021.05.14
최댓값과 최솟값 각각에 대한 우선순위큐를 만들고, 삽입과 삭제를 각각에 대해 처리해준다.
peek 함수로 최대/최소값을 찾고 찾은 값을 remove함수로 삭제
마지막에 empty가 아니면 배열에 담아서 반환한다.
import java.util.*;
class Solution {
static PriorityQueue<Integer> pq1 = new PriorityQueue<>();
static PriorityQueue<Integer> pq2 = new PriorityQueue<>(Collections.reverseOrder());
public int[] solution(String[] operations) {
int[] answer = new int[2];
for(String s : operations){
String tmp[] = s.split(" ");
if(tmp[0].equals("I")){
int add = Integer.parseInt(tmp[1]);
pq1.offer(add);
pq2.offer(add);
System.out.print(add+" ");
}
else if(tmp[0].equals("D")){
if(!pq1.isEmpty()){
if(tmp[1].equals("1")){
int delete = pq2.peek();
pq1.remove(delete);
pq2.remove(delete);
System.out.print(delete+" ");
}
else{
int delete = pq1.peek();
pq1.remove(delete);
pq2.remove(delete);
System.out.print(delete+" ");
}
}
}
}
if(!pq1.isEmpty()){
answer[1] = pq1.peek();
answer[0] = pq2.peek();
}
return answer;
}
}
문제 출처 링크