기타/코딩테스트

[Python] 백준 15903번 - 카드 합체 놀이

lazy man 2023. 4. 18. 20:13

1. 문제정보

https://www.acmicpc.net/problem/15903

 

15903번: 카드 합체 놀이

첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,

www.acmicpc.net

 

2. 해결전략

우선 가장 먼저 떠오르는 해결 전략은 우선 순위 큐였다. 해당 문제를 풀기 위해서는 가장 낮은 수 2개를 뽑아서 더해주는 게 핵심이다. 우선순위큐는 O(logN)의 시간 복잡도를 가지고 가중치에 먼저 추출할 수 있기 때문에 쉽게 해결이 가능할 것이라고 생각했다.

 

 

3. 코드

from queue import PriorityQueue

n, m = map(int, input().split())

cards = list(map(int, input().split()))

que = PriorityQueue()
for i in cards:
    que.put(i)

while m > 0:
    n1 = que.get()
    n2 = que.get()
    que.put(n1+n2)
    que.put(n1+n2)
    m -= 1

print(sum(list(que.queue)))