Study with book/Algorithms

[프로그래머스] 더 맵게


[더 맵게] programmers.co.kr/learn/courses/30/lessons/42626

더 맵게

 

 

풀고 느낀점

더 맵게는 쉽게 풀었습니다. 다른 Level2 정도의 문제보다 쉬워서 당황했습니다. 아니면... 제가 그만큼 실력이 향상된 것일까요? 그랬으면 좋을 것 같습니다. 풀이 방식은 우선순위 큐(힙)에다가 scoville 배열의 값을 하나씩 넣어줍니다. 그럼 heap은 우선순위에 맞게 정렬이 됩니다. heap에서 하나씩 데이터를 꺼내보면서 K보다 값이 작은지만 체크합니다. 작다면 섞은 음식의 스코빌 지수를 계산하는 공식을 적용해서 다시 heap에 넣어줍니다. K이상일 때 까지 반복합니다.

package algorithms.online.programmers.heap;

import java.util.PriorityQueue;

/**
 * 더 맵게 (X)
 * https://programmers.co.kr/learn/courses/30/lessons/42626
 */
public class HeapSolve3 {

    public static void main(String[] args) {
        HeapSolve3 heapSolve3 = new HeapSolve3();
        System.out.println(heapSolve3.solution(new int[]{0, 0}, 0)); // 0
        System.out.println(heapSolve3.solution(new int[]{1, 2, 3, 9, 10, 12}, 7)); // 2
    }

    public int solution(int[] scoville, int K) {

        PriorityQueue<Integer> heap = new PriorityQueue<>();
        for (int i : scoville) {
            heap.add(i);
        }

        if (heap.size() == 0) {
            return -1;
        }
        int count = 0;
        Integer value = heap.poll();
        while (value < K) {
            if (heap.size() == 0) {
                return -1;
            }
            count++;
            Integer sec = heap.poll();
            Integer mixed = value + (sec * 2);
            heap.add(mixed);
            value = heap.poll();
        }

        return count;
    }
}