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
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
'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 |