Old/Algorithms

[JAVA] 프로그래머스 : 더 맵게 (코딩테스트 고득점 kit > 힙(Heap))

유뱅유뱅뱅 2020. 7. 15. 17:48

https://programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같��

programmers.co.kr

우선순위 큐를 사용하여 구현함

문제에 주어진 과정에 따라 알고리즘을 구현하였음

import java.util.*;
// 더 맵게
// 우선순위 큐 사용
class Solution {
    //10^6
    public int solution(int[] scoville, int K) {
        int answer = 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i=0; i<scoville.length; i++){
            pq.offer(scoville[i]);
        }
        
        int newFoodScoville = 0;
        int firstFoodScoville = 0;
        int secondFoddScoviile = 0;
        while(!pq.isEmpty()){
            // 현재 pq는 오름차순으로 정렬되있는 상태
            // peek() 해서 K보다 크거나 같으면 clear()
            if(pq.peek() >= K){
                pq.clear();
            }
            // peek() 해서 K보다 작으면 음식 섞어주고 다시 pq에 추가
            else{
                if(pq.size() <= 1){
                    answer = -1;
                    break;
                }
                firstFoodScoville = pq.poll();
                secondFoddScoviile = pq.poll();
                newFoodScoville = firstFoodScoville + (secondFoddScoviile*2);
                
                pq.offer(newFoodScoville);
                answer++;
            }
            
        }
        
        return answer;
    }
}