heap
을 이용해서 풀 수 있는 문제다.- n장의 카드에 쓰여있는 수를 모두 더한 값이 가장 작게 만드는 것이 최종 목표라고 제시되어있다. 그러려면 n장의 카드 중에서 가장 작은 수 2개를 골라 더한 후
heap
에 2번을 넣어서 카드 합체를 진행하면 된다.
import heapq
import sys
input = sys.stdin.readline
# n개의 카드 + m번의 카드 합체
n, m = map(int, input().strip().split())
arr = list(map(int, input().strip().split()))
heapq.heapify(arr)
for _ in range(m):
a = heapq.heappop(arr)
b = heapq.heappop(arr)
temp = a + b
heapq.heappush(arr, temp)
heapq.heappush(arr, temp)
print(sum(arr))