매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 *2)
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.
제한 사항
입출력 예
입출력 예 설명
import heapq
def solution(scoville, K):
answer = 0
result = []
for value in scoville:
heapq.heappush(result, value)
while result[0] < K:
if len(result) < 2:
return -1
answer += 1
add_scovile = heapq.heappop(result) + heapq.heappop(result) * 2
heapq.heappush(result,add_scovile)
return answer
heapq 라이브러리를 사용하여 풀었다. 힙 라이브러리의 시간복잡도는 logN으로 리스트의 시간복잡도 N보다 낮기 때문에 사용하였다.
scoville 리스트를 힙으로 오름차순 정렬한 후, heapq.heappop()은 가장 작은 원소인 첫 번째 원소와 첫 번째 원소가 빠지면서 그다음 가장 작은 원소인 두 번째 원소를 빼내어 섞은 음식의 스코빌 지수를 계산해 준 후 다시 힙 리스트에 heapq.heappush()로 원소를 추가해주었다.
이때, 추가하면 자동으로 오름차순으로 정렬된다. 이를 활용해 while문으로 result 리스트의 가장 작은 원소가 K보다 같거나 클 때까지 반복한다.
만약 result의 첫 번째 원소가 K 이상에 도달하지 못하고 result의 원소 수가 2개 미만인 경우 -1을 return 해주었다.