백준(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;
}
댓글남기기