1일1알

백준 1715번 카드 정렬하기 C++ 본문

알고리즘

백준 1715번 카드 정렬하기 C++

영춘권의달인 2022. 6. 7. 12:42

출처 : https://www.acmicpc.net/problem/1715

 

작은거끼리 먼저 합칠수록 비교 횟수가 적어지기 때문에 우선순위 큐를 이용하여 제일 작은게 먼저 나오도록 해서 문제를 풀었다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>

using namespace std;
using ll = long long;

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

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

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

	ll ans = 0;
	while (!pq.empty()) {
		ll first = pq.top();
		pq.pop();
		if (pq.empty()) break;
		ll second = pq.top();
		pq.pop();
		ll cost = first + second;
		ans += cost;
		pq.push(cost);
	}
	cout << ans;
};

'알고리즘' 카테고리의 다른 글

백준 1043번 거짓말 C++  (0) 2022.06.09
백준 2504번 괄호의 값 C++  (0) 2022.06.08
백준 18258번 큐 2 C++  (0) 2022.06.06
백준 1021번 회전하는 큐 C++  (0) 2022.06.05
백준 1406번 에디터 C++  (0) 2022.06.04