우선순위 큐를 사용한 그리디 알고리즘 문제입니다. 11000번 강의실 배정 문제나 13334 철로 문제와 비슷하게 우선순위 큐를 적용합니다. 데드라인 순으로 정렬해주고 컵라면 개수에 대해서 비교하면서 그리디하게 우선순위 큐에 집어 넣어주면 됩니다.
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
int main()
{
int N; cin >> N;
priority_queue<int, vector<int>, greater<int>> pq;
vector<ii> v;
for(int i = 0; i < N; i++) {
int a, b; cin >> a >> b;
v.push_back({a, b});
}
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++){
int deadLine = v[i].first;
int cupRamen = v[i].second;
if(pq.size() < deadLine){
pq.push(cupRamen);
}
else{
if(pq.top() < cupRamen){
pq.pop();
pq.push(cupRamen);
}
}
}
int ans = 0;
while(!pq.empty()){
ans += pq.top();
pq.pop();
}
cout << ans;
}