Programming/백준
[실버 1] 백준 15903 - 카드 합체 놀이 (파이썬)
pental
2025. 5. 13. 13:38
https://www.acmicpc.net/problem/15903
풀이
- 숫자 카드 N장이 주어짐
- M번에 걸쳐 가장 작은 두 장을 골라 합친 뒤, 그 값을 두 장 모두에 덮어 씌움
- 최종 카드들의 합을 구하라
from queue import PriorityQueue
N, M = map(int, input().split())
A = list(map(int, input().split()))
- N: 카드 개수
- M: 합체 횟수
- A: 카드에 적힌 숫자들
pq = PriorityQueue()
for x in A :
pq.put(x)
최소 힙을 활용하기 위해서 PrioirtyQueue에 모든 값을 넣는다. (기본적으로 오름차순 우선순위로 동작한다.)
for _ in range(M) :
x = pq.get()
y = pq.get()
pq.put(x + y)
pq.put(x + y)
가장 작은 카드 2장 x, y를 꺼낸다.
그 합 x + y를 2당 모두로 다시 삽입한다.
sum = 0
while pq.qsize() != 0 :
sum += pq.get()
print(sum)
큐에 남은 카드 숫자들을 모두 더한다.
코드
# 백준 15903 - 카드 합체 놀이
# 분류 : 우선 순위 큐
from queue import PriorityQueue
N, M = map(int, input().split())
A = list(map(int, input().split()))
pq = PriorityQueue()
for x in A :
pq.put(x)
for _ in range(M) :
x = pq.get()
y = pq.get()
pq.put(x + y)
pq.put(x + y)
sum = 0
while pq.qsize() != 0 :
sum += pq.get()
print(sum)