반응형
코드
import heapq
import sys
t = int(input())
for _ in range(t):
k = int(input())
n_list = list(map(int,sys.stdin.readline().split()))
heapq.heapify(n_list)
if k == 1:
print(n_list[0])
break
answer = 0
while len(n_list)>1:
a = heapq.heappop(n_list)
b = heapq.heappop(n_list)
sum = a+b
answer+=sum
heapq.heappush(n_list,sum)
print(answer)
설명
우선 주어진 수 중에서 가장 작은 수를 먼저 더해야 최소 비용을 구할 수 있다. 그래서 힙을 이용해서 작은 수가 먼저 pop 될 수 있게 했다.
먼저 입력 값을 리스트로 받은 후 heapify를 이용해서 힙 자료형으로 변환할 수 있었다.
가장 작은 값 두 개씩 힙에서 꺼내서 더해준 뒤 그 값을 answer에 더해주고 다시 힙에 넣는다. 이걸 반복하게 되면 마지막에는 힙에 숫자 하나만 남게 되기 때문에 while문의 조건을 n_list의 길이가 1일 때 빠져나가는 것으로 했다.
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
[백준][Python] 1439번 뒤집기 (0) | 2022.05.25 |
---|---|
[백준][Python] 1715번 카드 정렬하기 (0) | 2022.05.04 |
[백준][Python] 2812번 크게 만들기 (0) | 2022.05.02 |
[백준][Python] 2141번 우체국 (0) | 2022.04.29 |
[백준][Python] 1092번 배 (0) | 2022.04.28 |
댓글