[ 문제 ]
[ 접근방법 ]
우선순위 큐를 활용하여 매번 제일 작은 두 카드를 고르고 합친다.
[ 소스코드 ]
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
int n, m;
priority_queue<ll, vector<ll>, greater<ll>> pq;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0; i < n; i++){
int cnt;
cin >> cnt;
pq.push(cnt);
}
while(m--){
ll a = pq.top();
pq.pop();
ll b = pq.top();
pq.pop();
a += b;
pq.push(a);
pq.push(a);
}
ll sum = 0;
while(!pq.empty()){
sum += pq.top();
pq.pop();
}
cout << sum;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 2631 : 줄세우기 (0) | 2024.10.30 |
---|---|
[ 백준 / C++ ] 10973 : 이전 순열 (0) | 2024.10.25 |
[ 백준 / C++ ] 13335 : 트럭 (0) | 2024.10.21 |
[ 백준 / C++ ] 10804 : 카드 역배치 (0) | 2024.10.20 |
[ 백준 / C++ ] 4470 : 줄번호 (0) | 2024.10.18 |