문제
작성 코드
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
while True:
j1 = heapq.heappop(scoville)
if j1 < K:
j2 = heapq.heappop(scoville)
if j2 < K:
jj = j1 + (j2*2)
heapq.heappush(scoville,jj)
else:
jj = j1 + (j2*2)
heapq.heappush(scoville,j2)
heapq.heappush(scoville,jj)
answer+=1
else:
break
return answer
난 heaqp를 잘 쓰지 않고 보통 리스트와 sort를 많이 썼는데,
이 문제는 heapq가 필요할 것 같아서 공부했다.
아래는 원소 입력 방법 / 리스트 자체로 입력 방법 / 맨 작은 원소 빼기 순서다.
1) 원소 입력 방법
heap = []
heapq.heappush(heap, 50)
2) 리스트 자체로 입력 방법
heap2 = [50 ,10, 20]
heapq.heapify(heap2)
3) 맨 작은 원소 빼기
result = heapq.heappop(heap)
위 코드로는 효율성 테스트는 모두 통과했는데, 5개 정도?에서 런타임 에러가 났다.
import heapq
def solution(scoville, K):
answer = 0
heapq.heapify(scoville)
while True:
j1 = heapq.heappop(scoville)
if j1 < K:
if scoville != []:
j2 = heapq.heappop(scoville)
if j2 < K:
jj = j1 + (j2*2)
heapq.heappush(scoville,jj)
else:
jj = j1 + (j2*2)
heapq.heappush(scoville,j2)
heapq.heappush(scoville,jj)
answer+=1
else:
return -1
else:
break
return answer
풀이
전체를 K 이상으로 만들 수 없는 경우 -1로 return하는데 이 예외 처리를 하지 않아서 발생했던 문제였다.그래서 if scoville != []: / else: 로 예외처리를 했고 정확도도 모두 통과했다!