- 오늘의 학습 키워드 : 우선순위 큐, PriorityQueue
// 기본형: 우선순위가 낮은 숫자가 먼저 나옴 (작은 숫자)
PriorityQueue<Integer> pQ = new PriorityQueue<>();
// 우선순위가 높은 숫자가 먼저 나옴 (큰 숫자)
PriorityQueue<Integer> pQ = new PriorityQueue<>(Collections.reverseOrder());
- add() : 우선순위 큐에 원소를 추가, 큐가 꽉 찬 경우 에러
- offer() : 우선순위 큐에 원소를 추가. 값 추가 실패 시 false
- poll() : 우선순위 큐에서 첫 번째 값을 반환 제거, 비어있으면 null
- remove() : 첫 번째 값 반환하고 제거, 비어있으면 에러
- isEmpty() : 첫번째 값 반환하고 제거, 비어있으면 에러
- clear() : 우선순위 큐를 초기화
- size() : 우선순위 큐에 포함되어 있는 원소 수 반환
PriorityQueue 기본적인 사용법
import java.util.PriorityQueue;
public class Example {
public static void main(String[] args) {
// 기본형 : 우선순위가 낮은 숫자가 먼저 나옴 (작은 숫자)
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(1); // pq에 원소 1 추가
pq.offer(5); // pq에 원소 6 추가
pq.offer(2); // pq에 원소 2 추가
// pq가 비어있으면 true, 그렇지 않으면 false
while(!pq.isEmpty()) {
System.out.println("pq.poll() = " + pq.poll();
}
}
}
class Solution {
public int[] numberGame(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length; i += 2) {
final int temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
return nums;
}
}
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> que = new PriorityQueue<>();
for (int i = 0; i < scoville.length; i++) {
que.add(scoville[i]);
}
while(que.peek() < K) {
if (que.size() == 1)
return -1;
que.add(que.poll() + que.poll() * 2);
answer++;
}
return answer;
}
}