[백준 1715] 카드 정렬하기

silverCastle·2022년 5월 23일
0

https://www.acmicpc.net/problem/1715

✍️ 첫번째 접근

각 묶음의 카드 수를 priority_queue에 저장하여 2개의 수를 꺼내 더하고 그 결과를 queue에 넣는 방식으로 구현하였다.
priority_queue는 기본적으로 최댓값이 먼저 pop되기 때문에 최솟값이 먼저 pop되게 priority_queue<int,vector<int>,greater<int>>으로 하였다.

#include <bits/stdc++.h>
using namespace std;
int n;
int sum;
priority_queue<int,vector<int>,greater<int>> pq;
int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    while(n--) {
        int num;
        cin >> num;
        pq.push(num);
    }
    while(true) {
        if(pq.empty())
            break;
        if(pq.size() == 1) {
            int num;
            num = pq.top();
            cout << sum << '\n';
            pq.pop();
            break;
        }
        int a,b;
        a = pq.top();
        pq.pop();
        b = pq.top();
        pq.pop();
        pq.push(a+b);
        sum += a+b;
    }

    return 0;
}

0개의 댓글