코드

def solution(scoville, K):
    heapq.heapify(scoville)
    cnt = 0

    while True:
        if len(scoville) == 1 and scoville[0] < K:

        a = heapq.heappop(scoville)

        if a < K:
            b = heapq.heappop(scoville)
            new = a + (b * 2)
            heapq.heappush(scoville, new)
            cnt += 1
        else:
            return cnt

풀이 과정

function solution(scoville, K) {
    let answer = 0;

    // 오름차순으로 정렬
    scoville.sort((a, b) => b - a);

    while (scoville[scoville.length - 1] < K) {
        // 가장 맵지 않은 음식의 스코빌 지수
        const leastSpicy = scoville.pop();
        // 두 번째로 맵지 않은 음식의 스코빌 지수
        const secondLeastSpicy = scoville.pop();

        // 섞은 음식의 스코빌 지수 계산 및 배열에 추가
        const mixedSpicy = leastSpicy + (secondLeastSpicy * 2);
        scoville.push(mixedSpicy);

        // 섞은 후 다시 정렬
        scoville.sort((a, b) => b - a);

        answer++;

        // 모든 음식의 스코빌 지수가 K 이상이 되면 반복 종료
        if (scoville[scoville.length - 1] >= K) {
            break;
        }

        // 음식이 하나만 남았는데 K 이상이 되지 않는 경우
        if (scoville.length === 1 && scoville[0] < K) {
            return -1;
        }
    }

    return answer;
}

이전에 풀었던 문제이지만 Heap 에 대한 지식이 부족한 것 같으므로 정리를 먼저 합니다.

위에 코드도 풀리지 않았던 문제로 이전에 시도했다가 포기한 문제입니다.

자료구조 ‘힙(heap)’

<aside> 💡 완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조로 최댓값, 최솟값을 쉽게 추출할 수 있는 자료구조입니다. - 출처

</aside>

types-of-heap.png

data-structure-heap-compare.png

data-structure-heap-priorityqueue.png

힙(heap) 자료구조 개념 이해하기 | 개발자 코딩테스트 & 면접 지식

기능개발(스택/큐)

이번 문제의 경우 JS로 문제를 풀려면 직접 힙을 구현을 했어야 합니다. 때문에 JS로 풀기에는 적절하지 않았던 것 같습니다.