[BOJ/C++] 1715 카드 정렬하기

GamzaTori·2024년 8월 16일

Algorithm

목록 보기
37/133

우선순위 큐를 이용하여 문제를 해결할 수 있습니다.

작은 묶음의 카드부터 더해나가는 것이 최솟값이기 때문에 오름차순의 우선순위 큐에 모든 카드를 넣습니다.

카드를 2개씩 꺼내어 두 묶음의 합을 우선순위 큐에 삽입하고 누적해서 더합니다.

// boj g4 1715
// 카드 정렬하기
#include<iostream>
#include<queue>
#include<algorithm>

using namespace std;

int main(void)
{
    ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

    int N;
    cin >> N;

    priority_queue<int, vector<int>, greater<int>> pq;

    for(int i=0; i<N; i++)
    {
        int tmp;
        cin >> tmp;
        pq.push(tmp);
    }
        
    int sum=0;
    while(pq.size()>1)
    {
        int data1=pq.top();
        pq.pop();
        int data2=pq.top();
        pq.pop();
        sum+=data1+data2;
        pq.push(data1+data2);
    }

    cout << sum;

    return 0;
}
profile
게임 개발 공부중입니다.

0개의 댓글