scoville
배열이 주어지고, K
값이 주어졌을 때 scoville
배열의 모든 원소가 K
값을 넘도록
- 가장 맵지 않은 음식의 스코빌 지수 + 두 번째로 맵지 않은 음식의 스코빌 지수 * 2
위의 식을 사용한다.
- 최소 값을 자유 자재로 뽑기 위해
heap
을 생각했고,heapq
라이브러리를 이용한다.
python
의heapq
는 자연적으로 최소 힙을 구성하기 때문에, 첫 번째 원소가K
이상인 경우 곧바로 정답을 리턴한다.
while
문에서는 최소 값이 7 이하인 경우 &scoville
의 길이가 2 이상인 경우를 만족해야 앞서 소개한 식을 적용할 수 있다.
scoville
의 길이를 필터링 하는 것은heappop()
과정에서 요소가 사라지는데, 이를 처리하지 않으면 비어있어도heappop()
을 수행하는 경우가 생길 수 있기 때문이다.
import heapq
def solution(scoville, K):
heapq.heapify(scoville)
answer = 0
if scoville[0] >= K: # 최소 값이 7 이상인경우
return answer # 리턴
while scoville[0] < K: # 최소 값이 7 이하인 경우에만
if len(scoville) <= 1: # 배열의 길이가 짧은 경우
return -1 # 리턴
first = heapq.heappop(scoville)
second = heapq.heappop(scoville)
heapq.heappush(scoville, first+(second*2))
answer += 1
return answer