작은 것부터 합해가면 되는 것 같다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main()
{
priority_queue<int, vector<int>, greater<int>> lq;
int N, ret = 0;
cin >> N;
while (N--)
{
int n;
cin >> n;
lq.push(n);
}
while (lq.size() != 1)
{
int first = lq.top();
lq.pop();
int second = lq.top();
lq.pop();
ret += first + second;
lq.push(first + second);
}
cout << ret;
return 0;
}
혹시나 했는데 맞았다. 작은 값부터 합해가며 1개의 카드 묶음이 되면 되는 것이다. 그 과정에서 합친 값을 누적해가면 된다.