알고리즘
[프로그래머스] 이중우선순위큐
yujeong kang
2021. 1. 3. 14:34
프로그래머스 level3 이중우선순위큐
소요시간 : 15분
무식하게 문제가 하라는대로만 푼 거 ㅎ
최소값 제거할 때는 마지막 값 빼고 리스트에 다 넣어서 다시 pq 에 넣었다 ㅋㅋㅋㅋㅋㅋ
마지막에 답 return 할 때는 최댓값은 peek으로 하고 최소값은 전부 다 poll 해서 마지막값했다
최댓값 peek 한 이유는 pq 사이즈가 1이어서 최대==최소 인 경우가 있을까봐..
그런데 풀고나서 다른 사람들 풀이보이 pq 를 두 개 써서 하나는 최대힙, 다른 하나는 최소힙으로 만들어서 했던데 그게 훨씬 효율적이고 깔끔하고 좋을듯 ㅎㅎ
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2)->(o2-o1));
for (int i = 0; i < operations.length; i++) {
switch(operations[i].charAt(0)) {
case 'I':
pq.offer(Integer.parseInt(operations[i].substring(2)));
break;
case 'D':
if(operations[i].charAt(2)-'0' == 1) {
pq.poll();
}
else {
int size = pq.size();
List<Integer> list = new ArrayList<>();
for (int q = 0; q < size-1; q++) {
list.add(pq.poll());
}
pq.poll();
for (int j = 0; j < list.size(); j++) {
pq.add(list.get(j));
}
}
break;
}
}
if(pq.size() == 0) return new int[] {0,0};
int[] answer = new int[2];
answer[0] = pq.peek();
int last = 0;
while(!pq.isEmpty()) {
last = pq.poll();
}
answer[1] = last;
return answer;
}
}