코드 흐름
- PriorityQueue 를 통해 우선순위를 오름차순으로 세팅하여 입력값의 스코빌 지수를 모두 pq안에 넣는다.
- 자동으로 pq에서는 오름차순으로 정렬된 상태이기에 pq.poll() 한다면 최저값이 나오고 이를 pq.peek()시에 스코빌지수가 K이하이고 pq의 사이즈가 2개 이상일때만 섞을수 있기에 조건문을 달아 while루프를 선언한다.
- 위 과정을 통해 pq사이즈가 2개 이하이거나 스코빌 최소지수가 k 이상이면 루프가 멈추기에 문제에서 알려준 대로 스코빌 지수를 더하고 곱하여 다시 pq에 넣는다. 그리고 그과정은 섞는과정이니 answer++ 해준다.
- 최종적으로 남은 pq에 peek()의 스코빌지수가 k 이상이면 answer을 리턴한다. 아니라면 -1을 리턴하여 모든 음식의 스코빌 지수를 k이상으로 만들지 못했음을 리턴한다.
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
Queue<Integer> pq = new PriorityQueue<>();
for(int s : scoville){
pq.add(s);
}
while(pq.peek() < K && pq.size()>=2){
answer++;
int first = pq.poll();
int second = pq.poll();
pq.add(first+(second*2));
}
return pq.peek() >= K ? answer:-1;
}
}
여태 풀어본 문제중에 가장 빠르고 깔끔하게 풀렸던 문제다. 기부니가 좋다.^^^^^^^^^^^^^
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 2. 택배상자 (1) | 2024.07.17 |
---|---|
Lv 2. 스킬트리 (0) | 2024.07.14 |
Lv 2. 주식가격 (0) | 2024.07.09 |
Lv 2. 디펜스게임 (0) | 2024.07.09 |
Lv 2. 땅따먹기 (0) | 2024.07.05 |