곧죽어도 콛잉

[그리디 / BOJ 1781 / C++] 컵라면 본문

Coding Test/C++

[그리디 / BOJ 1781 / C++] 컵라면

코드진행형 2023. 5. 18. 00:09

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

 

1781번: 컵라면

상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라

www.acmicpc.net

1) deadline / 컵라면 개수를 벡터에 집어 넣고, 오름차순 정렬을 한다.
2) 벡터를 순회하면서, 처음 요소의 컵라면부터 하나씩 최소힙에 넣어준다.
2-1) 만약, 이때, 힙의 size보다 넣었을때 그 deadline이 크다면, 해당 힙에서 하나씩 꺼낸다. (컵라면이 최대가 되는 경우만 모인다!)

** 이 문제는 이상하게 tie가 통하지 않았다.. 컴파일 에러나면 tie대신 pair를 묶을때는 { }를 쓰자..!

 

이 문제는 처음 접하면 어렵겠지만 

https://die-will-coding.tistory.com/61

 

[그리디 / BOJ 2109 / C++] 순회강연

https://www.acmicpc.net/problem/2109 2109번: 순회강연 한 저명한 학자에게 n(0 ≤ n ≤ 10,000)개의 대학에서 강연 요청을 해 왔다. 각 대학에서는 d(1 ≤ d ≤ 10,000)일 안에 와서 강연을 해 주면 p(1 ≤ p ≤ 10,000

die-will-coding.tistory.com

 

위 문제를 한번 보고오자!! 그러면 뭐이리 쉬워하면서 풀 것이다!

 

바로 코드를 보자!

 

#include <bits/stdc++.h>

using namespace std;

int N, dl, cups, ret;
vector<pair<int,int>> v;
priority_queue<int, vector<int>, greater<int>> pq; // 최소힙

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    cin >> N;
    for(int i = 0 ; i < N ; i++){
        
        cin >> dl >> cups;
        v.push_back({dl, cups});
        
        
    }
    
    sort(v.begin(), v.end());
    
    for(auto i : v){
        pq.push(i.second);
        
        while(pq.size() > i.first){
            pq.pop();
        }
        
    }
    
    while(pq.size()){
        ret += pq.top();
        pq.pop();
    }
    
    cout << ret <<'\n';
    
}

 

태그 : 1780, BOJ, C++, 백준, 재귀, 재귀함수, 종이의 개수

Comments