카테고리 없음
백준 13975 : 파일 합치기 3
저세상 개발자
2021. 8. 4. 19:38
https://www.acmicpc.net/problem/13975
13975번: 파일 합치기 3
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데,
www.acmicpc.net
그리디 알고리즘 문제로, 매 순간 순간에 최선의 선택을 하도록 문제를 해결하면 된다.
이 문제에서는 합치는 비용이 최소가 되도록 만드는 것이고, 가장 작은 것끼리 먼저 합치는 경우가 비용이 최소가 되는 경우이므로, 최소힙 구조를 이용하여 매 순간순간 최소값들을 구해 더해주면 된다.
코드로 구현하면 아래와같다.
#include <iostream>
#include <queue>
using namespace std;
using ll = long long;
priority_queue<ll> pq;
void solution() {
int t, n;
ll tmp, total, sum;
cin >> t;
while (t--) {
cin >> n;
while (n--) {
cin >> tmp;
pq.push(-tmp);
}
total = 0;
while (pq.size() > 1) {
tmp = -pq.top(); pq.pop();
sum = -pq.top() + tmp; pq.pop();
total += sum;
pq.push(-sum);
}
pq.pop();
cout << total << '\n';
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
solution();
return 0;
}
메모리: 14436 kb | 시간: 708 ms |