BOJ 1781 : 컵라면

·2023년 4월 24일
0

알고리즘 문제 풀이

목록 보기
117/165
post-thumbnail

풀이 요약

우선순위 큐

풀이 상세

  1. 데드라인과 컵라면 수를 받는 벡터를 생성하여 정렬한다. 정렬 기준은 기본 오름차순이다.

  2. 오름차순의 우선순위큐를 받아 일단 컵라면 수들을 담는다. 단 현재 데드라인 보다 우선순위큐의 사이즈가 큰 경우가 나타난다면 현재까지의 숙제가운데 어떠한 것을 포기해야한다는 뜻이며, 이때 가장 적게 받는 컵라면 수를 빼도록 하자.

  3. 남아있는 우선순위 큐의 총 수가 최대로 받을 수 있는 컵라면의 수이다.

#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;
priority_queue<int, vector<int>, greater<int>> pq;
int N, ret;
vector<pair<int, int>> v;

void input() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> N;
    int a, b;
    for (int i = 0; i < N; i++) {
        cin >> a >> b;
        v.push_back({a, b});
    }
    sort(v.begin(), v.end());
}

void solve() {
    for (int i = 0; i < v.size(); i++) {
        pq.push(v[i].second);
        if (pq.size() > v[i].first) pq.pop();
    }
    while (!pq.empty()) {
        ret += pq.top();
        pq.pop();
    }
}

void output() {
    cout << ret;
}

int main() {
    input();
    solve();
    output();
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글