import heapq
def solution(scoville, K):
mixCnt = 0
heapq.heapify(scoville)
while scoville[0] < K:
mixed = heapq.heappop(scoville) + 2 * heapq.heappop(scoville)
heapq.heappush(scoville, mixed)
mixCnt += 1
# 더이상 섞을 것이 없고 마지막 남은 것이 여전히 K보다 작다면 불가능으로 판단
if len(scoville) == 1 and scoville[0] < K:
return -1
return mixCnt
스코빌 지수가 가장 낮은 것과 두번째로 낮은 것을 섞어 새로운 것을 만들어 넣고 모든 음식의 스코빌 지수를 K이상으로 만들어야 하는 문제.
가장 낮은 수를 가진 음식, 그리고 두번째로 낮은 수를 가진 음식 두가지 모두 필요하고 새로운 수를 넣을때 마다 재정렬이 필요하다 생각해서 heap을 이용하면 편하겠다고 생각함.
while scoville[0] < K:
mixed = heapq.heappop(scoville) + 2 * heapq.heappop(scoville)
heapq.heappush(scoville, mixed)
mixCnt += 1
# 더이상 섞을 것이 없고 마지막 남은 것이 여전히 K보다 작다면 불가능으로 판단
if len(scoville) == 1 and scoville[0] < K:
return -1
while scoville[0] < K:
try:
mixed = heapq.heappop(scoville) + 2 * heapq.heappop(scoville)
heapq.heappush(scoville, mixed)
mix_cnt += 1
except:
return -1
...
마지막 하나인 상황만 생각하고 마지막 하나가 K보다 클때는 고려하지못한채 -1을 return해 처음에 계속 틀렸었다.