최소 힙 기본 구조 활용
알고리즘: Min Heap
import sys, heapq
n = int(sys.stdin.readline())
card = []
for i in range(n):
heapq.heappush(card, int(sys.stdin.readline())) # min-heap 구조로 원소 삽입하여 가장 작은 원소부터 더해나갈 수 있도록 함
ret = 0
while len(card) != 1: # card 더미가 한 개일 때는 비교 횟수가 0이며, 앞부터 2개씩 차례로 더해 나가다가 pop할 원소가 1개 뿐일 때 정지
tmp1 = heapq.heappop(card)
tmp2 = heapq.heappop(card)
tmp = tmp1 + tmp2
heapq.heappush(card, tmp) # 앞선 2개를 더한 것에 다음 원소를 더함
ret += tmp
print(ret)
별로 어려울 게 없는 문제였는데, 문제를 잘못읽어가지고
답이 나왔는데 아 왜 답이 안나와.. 이러면서 한참 잡고 있었다
자꾸 안나와서 돌고 돌아서 막 이상한 코드 쓰다가 아무래도 이건 넘 아닌 것 같은데,, 하면서 다시 거의 원점으로 돌아왔다,,,
이 문제는 문제에서 요구하는 최소 비교 횟수가 카드 더미의 수가 작은 것부터 차례대로 더해나가면 되는 것이기 때문에
최소 힙 구조를 활용하면 쉽게 풀 수 있는 문제였다