Algorithm/BOJ

[BOJ] 15903번 - 카드 합체 놀이

Dortmoot 2022. 6. 10. 14:11

[BOJ] 15903번 - 카드 합체 놀이

 

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

 

15903번: 카드 합체 놀이

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

www.acmicpc.net

 

알고리즘


그리디로 생각하여 풀었다.

작게 만들기 위해서는 작은 두수를 뽑아내서 갱신시켜주어야 한다.

이때 시간 복잡도가 가장 낮은 Heap을 이용

 

1. heapq를 이용하여 Data 초기화

2. 요청받은 갯수만큼 heapq 갱신

3. 갯수 출력

 

코드


#BOJ 15903번
import heapq

n , m = map(int,input().split())
datas = list(map(int,input().split()))
q = []

[ heapq.heappush(q,data) for data in datas ]

for _ in range(m) :
    temp = heapq.heappop(q)+heapq.heappop(q)
    heapq.heappush(q,temp)
    heapq.heappush(q,temp)

print(sum(q))