https://www.acmicpc.net/problem/1715
1. 의사코드
1. 최소값을 2개씩더하고, q에넣기, 정답에 더하기 하면된다
이방법이 왜 최적인지는 허프만코드 알고리즘과 동일하므로 이를 참고하면 된다.
2. 내코드
#include <bits/stdc++.h>
using namespace std;
int ret,n;
priority_queue<int,vector<int>,greater<int>> pq;
int main() {
cin.tie(0);
cin >> n;
while (n--) {
int tmp;
cin >> tmp;
pq.push(tmp);
}
while (pq.size()) {
auto cur = pq.top(); pq.pop();
if (pq.empty()) break;
auto nxt = pq.top(); pq.pop();
//cout << cur << " " << nxt << " \n";
pq.push(cur + nxt);
ret+= (cur + nxt);
}
cout << ret;
return 0;
}
3. 코드개선
while(pq.size())를
while(pq.size()>1)로 수정하면 if문이 없어도 된다.
'Algorithm > 우선순위큐' 카테고리의 다른 글
백준 11000 강의실배정 c++ // 강의실배정 vs 회의실배정, pq cmp 구현시 주의점 (0) | 2024.05.14 |
---|---|
프로그래머스 이중우선순위큐 c++ // pq, multiset 사용법 (0) | 2024.04.02 |
백준 1781 컵라면 c++ // 우선순위큐 정렬방법, 선택x인경우 처리방법 (0) | 2024.03.24 |
백준 1655 가운데를말해요 c++ // 우선순위큐 2개로 정렬효과만들기 (0) | 2024.03.24 |
백준 2075 n번째큰수 c++ // 우선순위큐, 발상, 수학 (0) | 2024.03.24 |