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)))
'기타 > 코딩테스트' 카테고리의 다른 글
[Python] 백준 11497번 - 통나무 건너띄기 (0) | 2023.04.20 |
---|---|
[Python] 백준 11501번 - 주식 (1) | 2023.04.20 |
[Python] 백준 13305번 - 주유소 (0) | 2023.04.13 |
[Python] 백준 1002번 - 터렛 (0) | 2023.04.12 |
[Python] 백준 1026번 - 보물 (0) | 2023.04.12 |