강의실 배정 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 256 MB | 19331 | 5761 | 4215 | 29.548% |
문제
수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다.
김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다.
참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.)
수강신청 대충한 게 찔리면, 선생님을 도와드리자!
입력
첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)
출력
강의실의 개수를 출력하라.
예제 입력 1 복사
3
1 3
2 4
3 5
예제 출력 1 복사
2
출처
풀이
pq를 이용해서 풀면 쉽다.
우선 입력받는 값을 정렬하고
pq를 벡터로 선언하고
6
1 2
1 3
1 4
2 3
2 4
2 5
3 4
3 6
3 7
(정렬된 상태)
이 있을때
pq에 우선 0번째 값의 second를 넣어준다
pq= 2
이상태에서 벡터를 순회하면서
벡터의 첫번째 값이 pq의 탑보다 크면
pq.top()을 pop시키고 벡터의 second을 pq에 넣어주고
그렇지않으면 그냥 벡터에 second값을 pq에 넣어준다.
1 3
pq=2,3
1 4
pq=2,3,4
2 3
pq= 2(삭제),3,4
2 4
pq = 3, 4, 4
2 5
pq= 3, 4, 4, 5
3 4
pq=3(삭제), 4, 4, 4, 5
3 6
pq= 4, 4, 4, 5, 6
3 7
pq = 4 4 4 5 6 7
코드
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int N;
int main() {
cin >> N;
vector<pair<int, int>> v;
priority_queue<int, vector<int>, greater<int>>pq;
for (int i = 0; i < N; i++) {
int a, b;
cin >> a>>b;
v.push_back({ a,b });
}
sort(v.begin(), v.end());
//정렬
pq.push(v[0].second);
for (int i = 1; i < N; i++) {
if (pq.top() <= v[i].first) pq.pop();
pq.push(v[i].second);
}
cout << pq.size();
return 0;
}
'백준' 카테고리의 다른 글
백준 1916 : 최소 비용 구하기 (0) | 2022.05.12 |
---|---|
백준 1197: 최소 스패닝 트리 (0) | 2022.05.12 |
백준 19273: 어른 상어 (0) | 2022.05.11 |
백준17825: 주사위 윷놀이 (0) | 2022.05.10 |
백준21608: 상어 초등학교 (0) | 2022.05.09 |