Algorithm/프로그래머스

[프로그래머스] 더 맵게 (자바) / 힙

미스터로즈 2021. 9. 16. 09:33

문제

 

입력&출력 예

 

문제풀이

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> arr = new PriorityQueue<Integer>();
        
        for(int i = 0 ; i < scoville.length;i++){
            arr.add(scoville[i]);
        }
        
        while( arr.peek()<K){
            if(arr.size()==1){
                return -1;
            }
            answer++;
            int a = arr.poll();
            int b = arr.poll();
            arr.add(a+(b*2));           
        }
        return answer;
    }
    
}

 

※ 내 생각

이 문제는 PriorityQueue를 이용하면 쉽게 해결할 수 있는 문제입니다.

while문에서 종료 조건을 잘 설정 해줘야 합니다. 오름차순이므로 첫 값이 스코빌 지수 보다 작은 경우는 계속 돌려주면 됩니다.

만약 다 더해도 스코빌 지수를 넘지 못하는 경우 또한 고려를 해서 작성하면 됩니다.