https://www.acmicpc.net/problem/1715
섞는 횟수를 최소로 하기 위해서는 가장 적은 묶음 끼리 더하면서 카드를 합해야 횟수를 최소로 할 수 있다.
최소묶음 끼리 더하면 되기 때문에 최소값을 다루기 쉬운 우선순위큐 heapq 모듈을 이용하여 문제를 해결 할 수 있다.
최소묶음끼리 더하고, 나온 묶음을 다시 heappush하고, 다시 최소묶음끼리 더하고 ... 반복하면 끝!
코드는 다음고 같다.
import sys
import heapq
input = sys.stdin.readline
def Sol():
N = int(input())
Card = []
for _ in range(N):
heapq.heappush(Card, int(input()))
total = 0
cnt = 0
while len(Card) > 1:
c1, c2 = heapq.heappop(Card), heapq.heappop(Card)
cnt = c1 + c2
total += cnt
heapq.heappush(Card,cnt)
print(total)
if __name__ == "__main__":
Sol()
글이나 코드에 대한 조언 모두 환영합니다!
'📚알고리즘 > 백준' 카테고리의 다른 글
[백준 2630번] 색종이 만들기(Python/파이썬) (0) | 2023.03.15 |
---|---|
[백준 24511번] queuestack (Python/파이썬) (0) | 2023.02.23 |
[백준 5525번] IOIOI (Python/파이썬) (0) | 2023.02.22 |
[백준 7576번] 토마토 (Python/파이썬) (0) | 2023.02.19 |
[백준 1012번] 유기농 배추 (Python/파이썬) (0) | 2023.02.18 |