-
13975 백준 - 파일 합치기 3, C++, 우선순위 큐쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 9. 18. 14:43반응형
13975번: 파일 합치기 3
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데,
www.acmicpc.net
#include <iostream> #include <queue> using namespace std; int t; int main(){ scanf("%d", &t); while (t--){ long long ans = 0, input; int k; priority_queue<long long> pq; scanf("%d", &k); for(int i = 0; i < k; i++){ scanf("%lld", &input); pq.push(-input); } int count = 0; while(!pq.empty()){ if(count == k - 1) break; long long cardA = -pq.top(); pq.pop(); long long cardB = -pq.top(); pq.pop(); long long newCard = cardA + cardB; pq.push(-newCard); ans += newCard; count++; } printf("%lld\n", ans); } }
첫 줄에서 테스트케이스 수를 입력받은 뒤 테스트 케이스별로 풀이를 하면 되는 문제였습니다. 우선순위 큐를 작은 수가 먼저 나오게 설정한 다음
1. 우선순위 큐에서 나온거 2개 합치기
2. 비용은 따로 변수에 저장
3. 이후 결과물은 다시 큐에 삽입
하면 풀 수 있는 문제였습니다. 코드가 어려운건 아니지만 우선순위 큐에 대한 이해가 필요한 문제였습니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 1644 - 소수의 연속합, C++, 에라토스테네스의 채, 두 포인터 (0) 2021.09.20 백준 14921 - 용액 합성하기 ,C++ (0) 2021.09.19 1647 백준 - 도시 분할 계획, C++, 크루스칼 알고리즘 (0) 2021.09.17 11003 백준 최솟값 찾기 - C++, 덱 (0) 2021.09.16 1823 백준 수확 - C++, DP (0) 2021.09.16