Algorithm & Data Structures/Programers
Lv 2. 더 맵게
Geisha
2024. 7. 10. 14:25
코드 흐름
- 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;
}
}
여태 풀어본 문제중에 가장 빠르고 깔끔하게 풀렸던 문제다. 기부니가 좋다.^^^^^^^^^^^^^