https://www.acmicpc.net/problem/15903
15903번: 카드 합체 놀이
첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,
www.acmicpc.net
풀이
우선순위 큐를 이용하여 풀었습니다.
카드 숫자를 heap 배열에 넣고 m번동안 가장 작은 힙 2개를 pop하고
더해서 다시 push하는 방식으로 구현하였습니다.
import heapq
n, m = map(int, input().split())
cards = list(map(int, input().split()))
heap = []
for card in cards:
heapq.heappush(heap, card)
for i in range(m):
a = heapq.heappop(heap)
b = heapq.heappop(heap)
heapq.heappush(heap, a+b)
heapq.heappush(heap, a+b)
print(sum(heap))
'백준 알고리즘' 카테고리의 다른 글
파이썬) 백준 알고리즘 | 2156번 : 포도주 시식 (0) | 2022.07.05 |
---|---|
파이썬) 백준 알고리즘 | 13975번 : 파일 합치기 3 (0) | 2022.07.01 |
파이썬) 백준 알고리즘 | 20004번 : 베스킨라빈스 31 (0) | 2022.07.01 |
파이썬) 백준 알고리즘 | 9661번 : 돌 게임 7 (0) | 2022.06.30 |
파이썬) 백준 알고리즘 | 9660번 : 돌 게임 6 (0) | 2022.06.30 |
댓글