https://school.programmers.co.kr/learn/courses/30/lessons/42626?language=python3#
import heapq
def solution(scoville, K):
start = len(scoville)
min_value = heapq.heappop(scoville)
while len(scoville) > 0 and min_value < K:
min2_value = heapq.heappop(scoville)
heapq.heappush(scoville, min_value + 2 * min2_value)
min_value = heapq.heappop(scoville)
if min_value < K:
return -1
return start - len(scoville) - 1
입력 받은 scoville을 힙으로 만들지 않고 바로 썼더니 예외처리에 걸렸다.
import heapq
def solution(scoville, K):
start = len(scoville)
hq = []
for s in scoville:
heapq.heappush(hq, s)
min_value = heapq.heappop(hq)
while len(hq) > 0 and min_value < K:
min2_value = heapq.heappop(hq)
heapq.heappush(hq, min_value + 2 * min2_value)
min_value = heapq.heappop(hq)
if min_value < K:
return -1
return start - len(hq) - 1
로직은 그대로 두고 힙으로 만들어서 진행하였더니 통과되었다.
import heapq
def solution(scoville, K):
hq = []
for s in scoville:
heapq.heappush(hq, s)
count = 0
while hq[0] < K:
try:
heapq.heappush(
hq, heapq.heappop(hq) + heapq.heappop(hq) * 2
)
except IndexError:
return -1
count += 1
return count
예외처리를 통해 간단하게 구현한 풀이이다. 회사에서 예외처리를 그렇게 많이 쓰면서 생각 못한게 아쉽다.