본문 바로가기
알고리즘

[백준] 11000 강의실 배정 (C++)

by kigo23 2023. 4. 14.
반응형

사용하는 강의실을 최소화 해야하는 문제이다.

우선순위 큐를 2개 사용해서 pq1은 강의 시작시간을 입력하고, pq2는 강의 종료시간을 오름차순으로 입력하였다.

시작시간과 종료시간이 비교하여 강의 시작시간이 종료시간보다 작으면 강의실 하나를 추가하고 강의 시작시간을 pop 하였다. 만약 시작시간이 종료시간보다 크다면 강의를 이어 진행할 수 있는 수업이라고 판단되어 강의실을 추가하지 않고 강의 시작시간과 강의 종료시간을 모두 pop 하였다. pq1이 empty상태일 때 반복문을 종료하고 답을 출력하였다.

#include <iostream>
#include <queue>
#include <functional>

using namespace std;

int main() {
    
    ios_base::sync_with_stdio(0);cin.tie(0);
    int n, temp, answer = 0;
    cin >> n;
    
    priority_queue<int , vector<int>, greater<int> > pq1;
    priority_queue<int , vector<int>, greater<int> > pq2;

    for(int i=0; i<n; i++){
        cin >> temp;
        pq1.push(temp);
        cin >> temp;
        pq2.push(temp);
    }

    while(!pq1.empty()){
        if(pq1.top() < pq2.top()){
            answer++;
            pq1.pop();
        }else{
            pq1.pop();
            pq2.pop();
        }
    }

    cout << answer;

  
    return 0;
}