Baekjoon Review
[Gold 5] 11000번 강의실 배정
hanseongbugi
2023. 11. 27. 16:01
https://www.acmicpc.net/problem/11000
11000번: 강의실 배정
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)
www.acmicpc.net
이 문제는 그리디 알고리즘을 통해 해결할 수 있다.
입력은 벡터를 사용해서 S와 T를 pair형태로 삽입한다.
그 후 우선순위 큐를 greater로 정렬하고, vector의 두번째 값인 T를 큐에 삽입한다.
큐에 모든 vector의 second 값을 삽입하는데 이때 가장 작은 값이 현재 벡터의 S값보다 작거나 같으면 큐에서 값을 뺀다.
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int N;
int main() {
cin >> N;
priority_queue<int, vector<int>, greater<int>> q;
vector<pair<int,int>> v;
for (int i = 0; i < N; i++) {
int S, T;
cin >> S >> T;
v.push_back(make_pair(S, T));
}
// 1 3 3 5, 2 4, 6 7
// 1 3 3 5 2 4 6 7
// 13 3 5 6 7, 2 4
sort(v.begin(), v.end());
q.push(v[0].second);
for (int i = 1; i < N; i++) {
q.push(v[i].second);
if (q.top() <= v[i].first) {
q.pop();
}
}
cout << q.size() << '\n';
}