https://school.programmers.co.kr/learn/courses/30/lessons/42626
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> que = new PriorityQueue<>();
for (int i : scoville) { // 큐에 하나씩 넣어줌
que.offer(i);
}
while (que.peek() < K) { // 처음 값(제일 작은 값)이 K보다 작지않을 때까지
if (que.size() == 1) {
return -1;
}
int a = que.poll(); // 첫번째, 두번째 값을 뽑아서 연산
int b = que.poll();
int result = a + (b * 2);
que.offer(result);
answer += 1; // 연산할 때마다 +1
}
return answer;
}
}
우선순위 큐
Priority Queue 선언
// int형 우선순위 큐 낮은 순자가 우선순위
PriorityQueue<Integer> que = new PriorityQueue<>();
// 낮은 순자가 우선순위
PriorityQueue<Integer> que = new PriorityQueue<>(Collections.reverseOrder);
// 높은 순자가 우선수위
값 추가, 참조, 삭제
<추가>
add(value) : 삽입에 성공하면 true 반환,
큐에 여유공간이 없어 삽입에 실패하면 IllegalStateException 발생
offer(value)
<참조>
peek() : 우선수위가 가장 높은 값 출력
<삭제>
poll() : 우선순위 첫번째 값을 반환하고 제거, 비어있다면 null 반환
remove() : 우선순위 첫번째 값 제거
clear() : queue 초기화
예시
PriorityQueue<Integer> que = new PriorityQueue<>();
que.offer(2);
que.offer(1);
que.offer(3);
que.peek(); // 1, 낮은 순자 순으로 배치되고 우선순위 첫번째 값은 1
잘 읽고갑니다~ 항상 화이팅!