https://www.acmicpc.net/problem/1374
1374번: 강의실
첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의
www.acmicpc.net
내가 제일 어려워하는 그리디 문제이다.
강의실을 가장 효율적으로 배정하는 방법은, 시작한 강의의 종료시간 이후에 가장 빨리 시작하는 강의를 배정하면 된다.
그래서 최소 힙에 현재 진행 중인 강의의 종료시간을 넣어주고 이제 시작해야 할 강의와 비교해서 맞바꾼다는 생각으로 구현하면 된다.
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
pair<int, int> arr[100001];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int a, b, c;
cin >> a >> b >> c;
arr[a] = { b,c };
}
sort(arr + 1, arr + n + 1);
priority_queue<int, vector<int>, greater<int>> q; //하고 있는 강의의 끝나는 시간
int ans = 0;
for (int i = 1; i <= n; i++) {
while (!q.empty() && q.top() <= arr[i].first) {
q.pop();
}
q.push(arr[i].second);
ans = max(ans, (int)q.size());
}
cout << ans;
}
'ps' 카테고리의 다른 글
[백준] 1761 - 정점들의 거리 (0) | 2022.08.26 |
---|---|
[백준] 1493 - 박스 채우기 (0) | 2022.08.26 |
[백준] 19236 - 청소년 상어 (0) | 2022.08.22 |
[백준] 1083 - 소트 (0) | 2022.08.22 |
[백준] 10423 - 전기가 부족해 (0) | 2022.08.22 |
댓글