💻 OnlineJudge/Baekjoon
[백준 / BOJ] C++ 1715 카드 정렬
스쳐가는비
2022. 10. 6. 20:17
https://www.acmicpc.net/problem/1715
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
풀이
우선순위 큐를 사용하는 간단한 문제이다.
우선순위 큐에 입력된 카드 갯수를 하나씩 push 해준 이후, top 의 원소 2개를 먼저 더해주고
해당 큐가 비어있지 않다면 push 해주어 다음 원소와 더한 값들을 결과값에 넣어주면 된다.
Code ( C++ )
#include <iostream>
#include <queue>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
priority_queue<int, vector<int>, greater<int>> pq;
cin >> N;
int cardNum = 0;
for (int i = 0; i < N; i++)
{
cin >> cardNum;
pq.push(cardNum);
}
//do {
//
//} while (!pq.empty());
if (N == 1)
{
cout << "0" << "\n";
return 0;
}
int result = 0;
while (!pq.empty())
{
int sum = 0;
sum += pq.top();
pq.pop();
if (!pq.empty()) {
sum += pq.top();
pq.pop();
if (!pq.empty())
pq.push(sum);
}
result += sum;
}
cout << result << "\n";
}