python - heap

승훈·2020년 11월 28일
0

[파이썬의 힙 자료구조]

heapq 모듈은 이진 트리(binary tree) 기반의 최소 힙(min heap) 자료구조를 제공합니다
min heap을 사용하면 원소들이 항상 정렬된 상태로 추가되고 삭제되며, min heap에서 가장 작은값은 언제나 인덱스 0, 즉, 이진 트리의 루트에 위치합니다

'힙'을 이용하여 코딩테스트 문제를 풀어보겠습니다.

[문제설명]

【매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 

모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 

​

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

​

Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.

Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 

모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.】

​

[제한 사항]

1. scoville의 길이는 2이상 1,000,000이하입니다.

2. K는 0이상 1,000,000,000이하입니다.

3. scoville의 원소는 각각 0이상 1,000,000이하입니다.

4. 모든 음식의 스코빌 지수를 K이상으로 만들 수 없는 경우에는 -1을 return합니다.

<코드>

import heapq
def solution(scoville, K):
    heapq.heapify(scoville)
    answer =0
    while (scoville[0] < K and len(scoville)!= 1):
        heapq.heappush(scoville,(heapq.heappop(scoville) + heapq.heappop(scoville)*2))
        answer += 1
    if len(scoville) == 1 and scoville[0] < K:
        return -1
    return answer

파이썬 내장모듈인 heapq를 이용하여 리스트를 최소 heap으로 만들고
heap[0]은 항상 가장 작은 숫자임을 이용하여 문자를 품.

0개의 댓글