1일1알

백준 26215번 눈 치우기 C++ 본문

알고리즘

백준 26215번 눈 치우기 C++

영춘권의달인 2023. 1. 18. 12:22

https://www.acmicpc.net/problem/26215

 

26215번: 눈 치우기

집 2와 집 3 앞의 눈을 치우고, 집 2와 집 3 앞의 눈을 치우고, 집 1과 집 3 앞의 눈을 치운 뒤 집 3 앞의 눈을 두 번 치우면 5분만에 모든 집 앞의 눈을 치울 수 있다.

www.acmicpc.net

 

우선순위 큐를 사용해서 눈이 많이 쌓인 집부터 치움

 

#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 int64 = long long; 

int n;

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

    priority_queue<int> pq;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        pq.push(a);
    }
    int ans = 0;
    while (!pq.empty()) {
        int a = pq.top();
        pq.pop();
        a -= 1;
        if (pq.empty() == false) {
            int b = pq.top();
            pq.pop();
            b -= 1;
            if (b > 0) pq.push(b);
        }
        if (a > 0) pq.push(a);
        ans++;
    }
    if (ans > 1440) ans = -1;
    cout << ans;
}

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

백준 2866번 문자열 잘라내기 C++  (0) 2023.01.20
백준 1138번 한 줄로 서기 C++  (0) 2023.01.19
백준 14940번 쉬운 최단거리 C++  (0) 2023.01.17
백준 2823번 유턴 싫어 C++  (1) 2023.01.16
백준 20310번 타노스 C++  (0) 2023.01.15