728x90
import heapq
def my_heap_example(L, T):
""" 주어진 비커의 리스트를 힙 구조로 변환 """
heapq.heapify(L)
result = 0
while len(L) >= 2 : #IndexError 방지
""" 힙에서 최솟값을 가져옴 """
min_ = heapq.heappop(L)
if min_ >= T: # 액체의 최솟값이 T보다 크다는 조건 만족(종료)
print("-"*40, "\nresult:", result)
return result
else: # 두 번째로 작은 값 가져와서 합친 값을 힙에 삽입
min_2 = heapq.heappop(L)
heapq.heappush(L, min_ + min_2*2)
result += 1
print("step{}: [{},{}] 합칩".format(result, min_ , min_2*2))
print(" →", L)
if L[0] > T:
print("-"*40, "\nresult:", result)
return result
else:
print("-"*40, "\nMission Failed")
return -1
t = 7
l = [1, 2, 3, 9, 10, 12]
my_heap_example(l, t)
설명을 아주 잘 해놓은 블로그 ⤵
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 파이썬 (0) | 2021.03.11 |
---|---|
[프로그래머스] 소수 찾기 파이썬 (0) | 2021.03.10 |
[프로그래머스] 조이스틱 (0) | 2021.03.05 |
[프로그래머스] 큰 수 만들기 (0) | 2021.03.04 |
[프로그래머스] 삼각 달팽이 (0) | 2021.03.04 |
댓글