https://school.programmers.co.kr/learn/courses/30/lessons/42626
모든 음식의 스코빌 지수가 담긴 배열이 주어지고, 가장 작은것과 그 다음으로 작은것을 조합해 모든 스코빌 지수가 K이상으로 되도록 하는 문제입니다.
가장 작은것과 두번째로 작은것을 추출해와야 한다는 것을 보고 PriorityQueue를 떠올렸습니다. 우선순위 큐에 넣으면 계속 크기별로 정렬되어 따로 정렬을 할 필요가 없기 떄문입니다.
그렇게 우선순위 큐에 2개 이상이 들어있고 맨 앞 원소가 K 이상이 될 때 까지 반복해주었습니다.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
int answer = 0;
for(int x: scoville) {
pq.add(x);
}
while(pq.peek() < K && pq.size() >= 2){
int x = pq.poll();
int y = pq.poll();
pq.add(x + y*2);
answer++;
}
return pq.peek() >= K ? answer : -1;
}
}