현재 가진 카드들 중 값이 가장 작은 두 카드를 골라 값을 더하면 된다.
min 값을(min 값만) 계속 찾아야 하기 때문에 pq를 이용한다.
카드에 적힌 숫자의 범위가 1,000,000 이하이지만 계속 더하면서 int 범위를 초과할 수 있기 때문에 자료형은 long long
구현
#include <iostream>
#include <queue> // pq
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m, i;
long long sum, tmp;
priority_queue<long long> pq;
cin >> n >> m;
for (i = 0; i < n; i++) {
cin >> tmp;
pq.push(-tmp);
}
for (i = 0; i < m; i++) {
tmp = -pq.top();
pq.pop();
tmp += (-pq.top());
pq.pop();
pq.push(-tmp);
pq.push(-tmp);
}
sum = 0;
while (!pq.empty()) {
sum += (-pq.top());
pq.pop();
}
cout << sum << endl;
return 0;
}