99클럽 코테 스터디 4주차 보너스문제 TIL
💙 JAVA 비기너
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
for(String operate : operations) {
StringTokenizer st = new StringTokenizer(operate);
String command = st.nextToken();
int number = Integer.parseInt(st.nextToken());
switch(command) {
case "D" :
if(minHeap.isEmpty() || maxHeap.isEmpty()) break;
if(number == 1) {
int max = maxHeap.poll();
minHeap.remove(max);
} else {
int min = minHeap.poll();
maxHeap.remove(min);
}
break;
case "I" :
minHeap.add(number);
maxHeap.add(number);
break;
}
}
int maxAnswer = maxHeap.isEmpty() ? 0 : maxHeap.poll();
int minAnswer = minHeap.isEmpty() ? 0 : minHeap.poll();
int[] answer = {maxAnswer, minAnswer};
return answer;
}
}
이름부터가 이중우선순위큐라서 아 우선순위 큐를 두개 쓰면 되는구나하고 힌트를 얻어갔다.
그래서 우선순위 큐를 오름차순과 내림차순으로 각각 minHeap
과 maxHeap
으로 만들어서 operations
에 있는 연산들을 실행시켰다.
foreach문으로 operations
을 하나씩 살피면서 "D"로 시작할 경우 minHeap
과 maxHeap
이 비어있는지 확인 후 비어있다면 연산을 패스하고 값이 있다면 "1"인지 "-1"인지에 따라 최대값, 최소값을 삭제해줬다.
"I"로 시작할 경우에는 minHeap
과 maxHeap
에 각각 값을 추가해줬다.
minHeap
과 maxHeap
가 비어있다면 0을 아니라면 각각의 최소값, 최대값을 추출하여 answer
배열에 넣어주면서 마무리 했다.