백준(boj)15903 - 카드 합체 놀이

업데이트:

문제 링크 - https://www.acmicpc.net/problem/15903

👀문제이해 및 풀이방법

기본적인 priority queue(우선순위 큐) 사용 방법이다.

compare 구조체를 통해 우선순위를 정하는 방법을 익히면 된다.
밑의 코드는 가장 작은 값이 올라오는 우선순위이다.

📝코드

#include <iostream>
#include <queue>
using namespace std;
typedef long long ll;
struct compare{
    bool operator()(ll& a,ll& b){
        return a>b;
    }
};
class basic_pq{
private:
    priority_queue<ll,vector<ll>,compare> pq;
    int n,m;
public:
    basic_pq(){
        std::cin >> n >> m;
        set_val();
    }
    void set_val(){
        ll tmp;
        for(int i=0;i<n;i++){
            std::cin >> tmp ;
            pq.push(tmp);
        }
    }
    void find_sol(){
        ll a,b;
        for(int i=0;i<m;i++){
            a=pq.top();
            pq.pop();
            b=pq.top();
            pq.pop();
            pq.push(a+b);
            pq.push(a+b);
        }
        ll sol=0;
        while(!pq.empty()){
            sol+=pq.top();
            pq.pop();
        }
        std::cout << sol << "\n";
    }


};
int main(){
    basic_pq bpq;
    bpq.find_sol();

    return 0;
}

image

댓글남기기