알고리즘 스터디 3주차 과제로 프로그래머스 ‘이중우선순위 큐’ 문제를 풀이하였다.
코딩테스트 연습 - 이중우선순위큐 | 프로그래머스 스쿨 (programmers.co.kr)
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return - Integer.compare(o1,o2);
}
});
compare
메서드 내에서 Integer.compare(o1, o2)
를 사용하여 두 정수를 비교하고 그 결과를 반전 시켜서 최대 힙의 특성을 만들게됨메서드 이름 | 내용 |
---|---|
add(E e), offer(E e) | 성공시 true 리턴, 실패시 llegalStateException. 지정된 요소를 큐에 추가 |
clear | 큐에 저장된 모든 요소를 삭제 |
peek() | 큐의 첫번쨰 값을 가져온다. 큐에서 삭제되지는 않음. |
poll() | 큐의 첫번째 값을 가져오고, 큐에서 제거 |
remove() | 큐의 첫번째 값 제거 , 매개변수로 특정 객체를 넣어 삭제할 수도 있음 |
size() | 큐 요소의 수를 리턴 |
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
//최소 힙
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
//최대 힙
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
for (int i = 0; i < operations.length; i++) {
String[] data = operations[i].split(" ");
char operation = data[0].charAt(0);
int number = Integer.parseInt(data[1]);
switch (operation) {
case 'I':
//데이터 삽입
System.out.println(number + "삽입");
maxHeap.add(number);
minHeap.add(number);
break;
case 'D':
if (number == 1) {
//최댓값 삭제
if (maxHeap.isEmpty()) {
continue;
} else {
int maxNum = maxHeap.peek();
System.out.println(maxNum + "삭제");
maxHeap.remove(maxNum);
minHeap.remove(maxNum);
}
} else {
//최솟값 삭제
if (minHeap.isEmpty()) {
continue;
} else {
int minNum = minHeap.peek();
System.out.println(minNum + "삭제");
maxHeap.remove(minNum);
minHeap.remove(minNum);
}
}
}
}
int[] answer = new int[2];
if (!maxHeap.isEmpty() && !minHeap.isEmpty()) {
answer[0] = maxHeap.peek();
answer[1] = minHeap.peek();
}
return answer;
}
}