Axolotl

BOJ 1781 컵라면

28 Nov 2024

우선순위 큐를 사용한 그리디 알고리즘 문제입니다. 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; 
}