본문 바로가기

PS

[ 백준 / C++ ] 15903 : 카드 합체 놀이

[ 문제 ]

 

15903번: 카드 합체 놀이

 

[ 접근방법 ]

 

우선순위 큐를 활용하여 매번 제일 작은 두 카드를 고르고 합친다.

 

[ 소스코드 ]

 

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

typedef long long ll;

int n, m;
priority_queue<ll, vector<ll>, greater<ll>> pq;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    for(int i = 0; i < n; i++){
        int cnt;
        cin >> cnt;
        pq.push(cnt);
    }

    while(m--){
        ll a = pq.top();
        pq.pop();
        ll b = pq.top();
        pq.pop();

        a += b;

        pq.push(a);
        pq.push(a);
    }

    ll sum = 0;
    while(!pq.empty()){
        sum += pq.top();
        pq.pop();
    }

    cout << sum;

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 2631 : 줄세우기  (0) 2024.10.30
[ 백준 / C++ ] 10973 : 이전 순열  (0) 2024.10.25
[ 백준 / C++ ] 13335 : 트럭  (0) 2024.10.21
[ 백준 / C++ ] 10804 : 카드 역배치  (0) 2024.10.20
[ 백준 / C++ ] 4470 : 줄번호  (0) 2024.10.18