[백준/BOJ] 백준 6195번 : Fence Repair
2023. 10. 25. 21:03ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/6195
필요한 나무가 모두 나눠진 상태에서 합쳐지면서 비용이 드는 것으로 생각하여, 현재 상태의 나무들 중 가장 작은 길이 두개를 합쳐가면서, 하나의 나무로 만들어 가는 과정으로 비용을 구했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int n;
vector<long long> need;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
long long input;
cin >> input;
need.push_back(input);
}
//필요한 나무가 모두 나눠진 상태에서 합쳐지면서 비용이 드는것으로 생각
long long result = 0;
priority_queue<long long> pq;
for (int i = 0; i < need.size(); i++) {
pq.push(-need[i]);
}
//현재 상태의 나무들 중 가장 작은 길이 두개를 합쳐가면서, 하나의 나무로 만들어 간다
while (pq.size() >= 2) {
long long len1 = -pq.top();
pq.pop();
long long len2 = -pq.top();
pq.pop();
result += (len1 + len2);
pq.push(-(len1 + len2));
}
cout << result;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 18267번 : Milk Visits (1) | 2023.10.25 |
---|---|
[백준/BOJ] 백준 23567번 : Double Rainbow (0) | 2023.10.25 |
[백준/BOJ] 백준 7535번 : A Bug’s Life (0) | 2023.10.25 |
[백준/BOJ] 백준 13147번 : Dwarves (0) | 2023.10.25 |
[백준/BOJ] 백준 9869번 : Milk Scheduling (0) | 2023.10.25 |