[ 문제 ]
[ 접근방법 ]
모든 카드를 우선순위 큐에 넣고 제일 작은 두 카드를 꺼낸다.
두 카드의 합을 저장하고 우선순위 큐에 넣은 후, 위 과정을 반복한다.
각 과정은 O(log n) 이므로, 시간복잡도는 결국 O(n log n) 이다.
[ 소스코드 ]
#include <iostream>
#include <queue>
using namespace std;
int n, cnt, ans;
priority_queue<int, vector<int>, greater<int>> pq;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
while (n--)
{
cin >> cnt;
pq.push(cnt);
}
while (pq.size() > 1)
{
cnt = pq.top();
pq.pop();
cnt += pq.top();
pq.pop();
ans += cnt;
pq.push(cnt);
}
cout << ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 2605 : 줄 세우기 (0) | 2024.05.01 |
---|---|
[ 백준 / C++ ] 1389 : 케빈 베이컨의 6단계 법칙 (0) | 2024.04.30 |
[ 백준 / C++ ] 15686 : 치킨 배달 (0) | 2024.04.26 |
[ 백준 / C++ ] 14940 : 쉬운 최단거리 (0) | 2024.04.25 |
[ 백준 / C++ ] 11779 : 최소비용 구하기 2 (0) | 2024.04.24 |