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 해준다.