이번 문제는 우선순위큐를 사용하여 우선순위큐의 크기가 1보다 클 동안 가장 작은 두 수를 더한 값을 결과값에 계속해서 더해주어 해결하였다.
가장 작은 두 카드덱을 합치는 것이 가장 작은 결과를 도출한다는 패턴을 쉽게 알 수 있었다.
초기에는 우선순위큐를 사용하지 않고 리스트를 사용하여 while문 안에서 매 반복마다 .sort()함수를 사용해 오름차순 정렬하였는데 이는 while문의 O(n)과 .sort()함수의 O(n)이 곱해져 시간복잡도가 O(n^2)가 나오기 때문에 당연히 시간초과가 발생하였다.
파이썬에서 우선순위큐는 힙을 사용하여 구현할 수 있다.
import heapq
n=int(input())
card=[]
for i in range(n):
heapq.heappush(card, int(input()))
answer=0
while len(card)>1:
tmp1=heapq.heappop(card)
tmp2=heapq.heappop(card)
answer+=(tmp1+tmp2)
heapq.heappush(card, tmp1+tmp2)
print(answer)