본문 바로가기
Algorithm/그리디

[백준] 1715 카드 정렬하기 c++

by 젊은오리 2023. 3. 21.
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

댓글