1) scoville를 for문으로 순회하여 heap에 push한다.
2) heap은 min-heap으로 제일 작은 값이 맨 앞에 온다.
3) while문으로 heap[0]가 주어진 K 지수보다 작을 경우에 계속 반복한다.
4) 스코빌 지수가 가장 낮은 두개를 꺼내기 위해서 heappop을 2번 진행하고, 꺼낸 값을 주어진 식으로 연산하여 다시 heap에 push한다.
5) 만약 heap에서 pop할 값이 남아 있지 않다면, -1을 리턴한다.
6) while 내부를 한번 돌 때 마다 answer에 1씩 더한다.
7) while 문이 끝나면 answer를 리턴한다.
import heapq
def solution(scoville, K):
answer = 0
heap = []
for i in scoville:
heapq.heappush(heap, i)
while heap[0] < K:
try:
heapq.heappush(heap, heapq.heappop(heap) + ( heapq.heappop(heap) * 2 ))
except:
return -1
answer += 1
return answer
실시간으로 정렬을 해서 최소값이나 최대값을 뽑아내야 하는 상황이 있다면 힙을 사용
heapify, heappush, heappop의 사용법과 max-hip 생성하는 방법
인덱스, 런타임 에러는 try~except 구문으로 잡아주는 것이 파이써닉하다.