문제 링크 : www.acmicpc.net/problem/15903
내 풀이(2021.1.4.) :
#include <iostream>
#include <queue>
using namespace std;
priority_queue<long long, vector<long long>, greater<long long>> pq;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m; cin >> n >> m;
for (int i = 0; i < n; i++) {
long long temp; cin >> temp; pq.push(temp);
}
for (int i = 0; i < m; i++) {
long long temp1 = pq.top(); pq.pop();
long long temp2 = pq.top(); pq.pop();
pq.push(temp1 + temp2);
pq.push(temp1 + temp2);
}
long long sum = 0;
while (!pq.empty()) {
sum += pq.top(); pq.pop();
}
cout << sum;
return 0;
}
카드 1,000장이 모두 1,000,000라는 숫자가 적혀있는 경우를 생각했을 때
합체를 최대 15,000번까지 할 수 있으니
합이 15,000 x 1,000,000 = 150억이 될 수도 있다.
int는 20억까지만 표현할 수 있으니, 오버플로우가 발생하지 않도록 long long을 써야 한다.
'알고리즘 > 자료 구조' 카테고리의 다른 글
백준 9375번 : 패션왕 신해빈 (0) | 2021.01.22 |
---|---|
백준 1620번 : 나는야 포켓몬 마스터 이다솜 (0) | 2021.01.21 |
우선순위 큐와 힙 개념 및 C++ STL (0) | 2021.01.04 |
C++로 알고리즘 풀이 시 필수 지식 (0) | 2021.01.03 |
C++ STL vector 시간복잡도 (0) | 2020.12.31 |