https://www.acmicpc.net/problem/1715
각 묶음의 카드 수를 priority_queue
에 저장하여 2개의 수를 꺼내 더하고 그 결과를 queue에 넣는 방식으로 구현하였다.
priority_queue는 기본적으로 최댓값이 먼저 pop되기 때문에 최솟값이 먼저 pop되게 priority_queue<int,vector<int>,greater<int>>
으로 하였다.
#include <bits/stdc++.h>
using namespace std;
int n;
int sum;
priority_queue<int,vector<int>,greater<int>> pq;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
while(n--) {
int num;
cin >> num;
pq.push(num);
}
while(true) {
if(pq.empty())
break;
if(pq.size() == 1) {
int num;
num = pq.top();
cout << sum << '\n';
pq.pop();
break;
}
int a,b;
a = pq.top();
pq.pop();
b = pq.top();
pq.pop();
pq.push(a+b);
sum += a+b;
}
return 0;
}