LEVEL2/더 맵게

Q·2021년 8월 8일
0

문제 설명


전체 코드

import heapq

def solution(heap, k):
    heapq.heapify(heap)

    count = 0
    while heap[0] < k and len(heap) > 1:
        temp1 = heapq.heappop(heap)
        temp2 = heapq.heappop(heap)
        if temp1 < k:
            temp = temp1 + (temp2 * 2)
            heapq.heappush(heap, temp)
            count += 1
        else:
            break

    for i in heap:
        if i < k:
            return -1 

    return count

해결 방법

힙의 특성을 알면 쉽게 풀 수 있는 문제이다. 일단 문제 해결법은 문제 그대로 구현을 하면 되어서 다른 이해가 필요하지 않다. 코드를 보면 heapq.heapify를 사용하여 heap리스트를 힙으로 만들어준 후 반복문을 돌리는데 while의 조건을 heap[0]가 k보다 작고 heap의 길이가 1보다 클때로 지정한 후 최소 힙의 특성을 활용하여 heap 리스트에서 제일 작은 수를 heapq.heappop으로 뽑아 temp1에 넣고 그 다음 작은 수를 temp2에 넣는다. 만약 temp1이 k보다 크다면 그건 모든 스코필 지수가 k보다 크다는 것이므로 break를 해주고 그게 아니라면 temp에 문제에 나온대로 temp1 + temp2*2를 해준 후에 heap리스트에 push해주고 count +1를 해준다. 그리고 while 반복문이 끝난후 heap리스트를 봐서 k보다 작은 수가 heap리스트에 있다면 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우이므로 reutnr -1을 해주고 그게 아니라면 count를 return 해준다.

profile
Data Engineer

0개의 댓글

관련 채용 정보