from heapq import *
n = int(input())
heap = [int(input()) for _ in range(n)] # 요소들 힙에 추가
heapify(heap)
result = 0
while len(heap) > 1: # 힙에 더이상 더할 요소가 남지 않을때까지
x = heappop(heap) # 첫번째 작은 값
y = heappop(heap) # 두번째 작은 값
heappush(heap, x + y) # x + y 의 합을 다시 힙에 추가
result += x + y
print(result)
문제 그대로 코드를 썼다. 최소값 순으로 두 값을 더하고 그 합을 남은 값과 다시 더하는 방식으로 구현했다. 힙에 더이상 더할 값이 없을때까지 반복문을 돌리게 하고 첫번째로 작은 값과 두번째로 작은 값을 더해주었다. 그리고 그 합을 다시 힙에 추가하여 반복하게 했다.
https://www.acmicpc.net/problem/1715
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 2805 : 나무 자르기 (0) | 2024.04.05 |
---|---|
[백준] 파이썬 11399 : ATM (0) | 2024.04.05 |
[백준] 파이썬 11286 : 절댓값 힙 (0) | 2024.04.04 |
[백준] 파이썬 15903 : 카드 합체놀이 (0) | 2024.04.04 |
[백준] 파이썬 2075 : N번째 큰 수 (0) | 2024.04.04 |