알고리즘
그리디
[1715] 카드 정렬하기
by Hwang
문제
https://www.acmicpc.net/problem/1715
풀이
카드를 묶음을 합치는 횟수를 생각해보았을 때 어떠한 방식으로 묶음을 합쳐가든 횟수는 동일합니다.
따라서 비교의 수를 최소로 하기 위해서는 현재 존재하는 가장 카드의 개수가 작은 두 개의 묶음을 합치는 방식으로 하면 되겠다고 생각이 되었습니다.
저는 최소 힙을 이용해서 가장 작은 두 묶음을 뽑아주는 방식으로 풀이했습니다.
import sys
import heapq
N = int(sys.stdin.readline())
heap = []
result = 0
for _ in range(N):
bundle = int(sys.stdin.readline())
heapq.heappush(heap, bundle)
while len(heap) > 1:
bundle1 = heapq.heappop(heap)
bundle2 = heapq.heappop(heap)
merge = bundle1 + bundle2
result += merge
heapq.heappush(heap, merge)
print(result)
Comment