알고리즘/백준

[백준][C++] 19598: 최소 회의실 개수

KANTAM 2024. 2. 27. 21:21

문제

 

19598번: 최소 회의실 개수

2개 회의실로 3개 회의를 모두 진행할 수 있다. 예를 들어, 첫번째 회의실에서 첫번째 회의를 진행하고 두번째 회의실에서 두번째 회의와 세번째 회의를 진행하면 된다. 1개 회의실로 3개 회의

www.acmicpc.net

풀이

그리디, 우선순위 큐

 

 

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

문제 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net 풀이 그리디, 우선순위 큐 [백준][C++] 2170: 선 긋기 문제 풀

kantatatam.tistory.com

위의 문제와 풀이가 같은 문제

코드

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

using namespace std;

vector<pair<int, int>> v;
priority_queue<int, vector<int>, greater<int>> pq;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    int N;
    cin >> N;

    int answer = 0;

    for (int i = 0; i < N; ++i)
    {
        int start, end;
        cin >> start >> end;

        v.push_back(make_pair(start, end));
    }
    sort(v.begin(), v.end());

    for (int i = 0; i < N; ++i)
    {
        int current_start = v[i].first;
        int current_end = v[i].second;

        if (!pq.empty())
        {
            // 가장 빨리 끝나는 수업이 현재 시작하는 강의보다 빨리 끝난다면 같은 강의실을 사용할 수 있다.
            if (current_start >= pq.top())
            {
                pq.pop();
            }
        }

        pq.push(current_end);

        answer = max(answer, (int)pq.size());
    }

    cout << answer;

    return 0;
}