반응형
문제
풀이
최소로 비교하는 방법은 작은 값부터 합치는 것이다.
방법은 다음과 같다.
1. 오름차순으로 queue를 정리한다.
2. 최소값 두 개를 꺼내고 합친 값을 queue에 다시 푸쉬
3. queue 사이즈가 1이라면 출력
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <iostream>
#include <queue>
#include <functional>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
// 우선순위 큐(오름차순 정렬)
priority_queue<int, vector<int>, greater<>> pq;
int N;
int sum = 0;
cin >> N;
// 입력
for (int i = 0; i < N; i++) {
int num;
cin >> num;
pq.push(num);
}
// 두개 꺼내고 다시 넣어줌
while (1) {
// 사이즈 1이면 지금까지의 합 출력
if (pq.size() == 1) {
cout << sum;
break;
}
int temp1, temp2;
temp1 = pq.top();
pq.pop();
temp2 = pq.top();
pq.pop();
int tempsum = temp1 + temp2;
sum += tempsum;
pq.push(tempsum);
}
return 0;
}
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 5052] 전화번호 목록 C++ (0) | 2021.11.27 |
---|---|
[백준 13913] 숨바꼭질 4 C++ (0) | 2021.11.24 |
[백준 2096] 내려가기 C++ (0) | 2021.11.22 |
[백준 1339] 단어 수학 C++ (0) | 2021.11.15 |
[백준 1405] 미친 로봇 C++ (0) | 2021.11.15 |