728x90
문제 링크 https://www.acmicpc.net/problem/1715
KEY
- 우선순위 큐를 활용하는 간단한 문제이다.
- 두 카드묶음을 선택할 때, 순서대로 고르지 않아도 되고 무작위로 두개를 선택해도 되므로, 스택(stack)이 아닌 우선순위 큐(priority_queue)를 사용한다.
N의 조건이 1부터 100,000이라서 N이 1일때도 고려해야 하는데 1일때를 고려해서 풀면 오히려 오답이 나온다..🤔
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
int N;
vector<int> v;
priority_queue<int, vector<int>, greater<>> pq;
int answer;
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
int card;
cin >> card;
pq.push(card);
}
while (pq.size() >= 2) {
//가장 작은 카드묶음 2개 선택
int first = pq.top();
pq.pop();
int second = pq.top();
pq.pop();
//합을 push
pq.push(first + second);
answer += (first + second);
}
cout << answer;
}
|
cs |
728x90
'Algorithm > 그리디' 카테고리의 다른 글
[백준] 1946 신입사원 c++ (0) | 2023.03.20 |
---|---|
[백준] 11047 동전0 c++ (0) | 2023.03.20 |
[백준] 2839 설탕 배달 c++ (0) | 2023.03.15 |
[백준] 11000 강의실 배정 c++ (0) | 2022.02.02 |
백준 1343 폴리오미노 (0) | 2022.02.01 |
댓글