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;
    }
}

 

여태 풀어본 문제중에 가장 빠르고 깔끔하게 풀렸던 문제다. 기부니가 좋다.^^^^^^^^^^^^^