Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- boj 2661
- boj 2667
- 백준 2636
- 백준 2661
- 10800
- boj 2636
- 백준 1806
- 백준 1503
- 백준 2167
- boj 1697
- 백준 10800
- 2167
- boj 1503
- boj 2470
- 백준 1697
- boj 2635
- 백준 2635
- 백준 2470
- 백준 2108
- boj 10800
- 백준 2206
- boj 2108
- 백준 2178
- boj 19238
- 백준 19238
- boj 2178
- boj 2206
- 2636
- boj 1806
- boj 2167
Archives
- Today
- Total
말랑말랑한 개발자 이야기
[백준 11000번] 강의실 배정 본문
[백준 11000번] 강의실 배정
문제
수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.
김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.
참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)
수강신청 대충한 게 찔리면, 선생님을 도와드리자!
입력
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
이후 N개의 줄에 Si, Ti가 주어진다. (1 ≤ Si < Ti ≤ 109)
출력
강의실의 개수를 출력하라.
풀이
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
vector<pair<int, int>> v;
priority_queue<pair<int,int>, vector<pair<int, int>>, greater<pair<int, int>>> temp;
cin >> N;
for(int i=0;i<N;i++){
int s, t;
cin >> s >> t;
v.push_back(make_pair(s, t));
}
sort(v.begin(), v.end());
temp.push(make_pair(v[0].second, v[1].first));
for(int i=1;i<v.size();i++){
if(temp.top().first > v[i].first) temp.push(make_pair(v[i].second, v[i].first));
else{
temp.pop();
temp.push(make_pair(v[i].second, v[i].first));
}
}
cout << temp.size();
return 0;
}
1. 수업의 시작 시간을 기준으로 오름차순 정렬시킨다.
2. 우선순위 큐는 수업의 끝 시간을 기준으로 오름차순 정렬되도록 한다.
3. 우선순위 큐의 top은 가장 빨리 끝나는 수업이고 그 끝나는 시간과 비교해서 강의실이 하나 더 필요한 경우에는 push를, 그 수업이 끝나고 연달아서 가능한 경우에는 pop후 push한다.
방법은 바로 떠올랐지만 실수가 많았던 문제이다. 더 많은 문제를 풀어볼 필요가 있어 보인다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11659번] 구간 합 구하기 4 (0) | 2021.01.09 |
---|---|
[백준 1929번] 소수 구하기 (0) | 2021.01.08 |
[백준 1655번] 가운데를 말해요 (0) | 2021.01.06 |
[백준 1107번] 리모컨 (0) | 2021.01.06 |
[백준 14888번] 연산자 끼워넣기 (0) | 2021.01.05 |