개발 블로그

[프로그래머스/python/Heap] 더 맵게 본문

IT/Programmers

[프로그래머스/python/Heap] 더 맵게

파티에 2021. 4. 5. 22:45

1. 서론
 위 문제는 Heap으로 분류되어 있으나 이전 문제들과 달리 javascript를 지원하지 않는 문제이기 때문에 python으로 문제를 풀었다. python은 heap에 대한 라이브러리로 heapq를 지원하기 때문에 heapq를 사용했다.

2. 문제설명(출처: programmers.co.kr/learn/courses/30/lessons/42626)

3. 문제 풀이
 1) 문제에서 모든 음식의 스코빌 지수를 K이상으로 만들고 싶습니다. 라고 했기 때문에 스코빌 지수가 0인 경우 바로 0을 반환한다.
 2) 문제에서 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. 라고 하였으니 min heap을 사용해 root 노드와 root의 자식를 반복해서 섞는다.
 3) 2번의 작업을 반복하기 위해 heapq에서 2개의 요소를 pop한 뒤, 스코빌 지수를 계산하고 이를 다시 push한다.
 4) heap의 root 노드가 스코빌 지수 K를 넘기거나, 모든 스코빌 지수를 계산했음에도 K를 넘기지 못했다면 반복문을 끝낸다.
 4) heap의 요소들이 K를 넘겼다면 섞은 횟수를 반환하고, 넘기지 못했다면 -1을 반환한다.

4. 결과코드

import heapq
def solution(scoville, K):
    if K == 0:
      return 0
    answer = 0
    heap = []
    for i in scoville:
        heapq.heappush(heap, i)

    i = 0
    while(heap[0] <= K and i < len(scoville)-1):
        heapq.heappush(heap, heapq.heappop(heap) + heapq.heappop(heap) * 2)
        answer += 1
        i+= 1
        
    if heap[len(heap)-1] <= K:
        answer = -1
        
    return answer