728x90
반응형
https://www.acmicpc.net/problem/1374
1374번: 강의실
첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의
www.acmicpc.net
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
int n;
vector<pair<int, int>> v;
priority_queue<int, vector<int>, greater<>> pq;
cin >> n;
for(int i = 0; i < n; i++){
int a, b, c;
cin >> a >> b >> c;
v.push_back({b, c});
}
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++){
if(pq.empty()) {
pq.push(v[i].second);
continue;
}
if(pq.top() <= v[i].first) {
pq.pop();
}
pq.push(v[i].second);
}
cout << pq.size() << endl;
return 0;
}
벡터에는 입력받은 강의 시작 시간과 종료 시간을 쌍으로 저장한다. (강의 번호는 저장할 필요 없다.)
벡터를 강의 시작 시간 기준으로 오름차순 정렬한다.
벡터를 돌며 오름차순 우선순위 큐에 종료 시간을 저장하는데
- 현재 강의 시작 시간이 우선순위 큐 top에 있는 종료 시간보다 같거나 늦으면 같은 강의실을 쓸 수 있으므로 pop하고 현재 강의 종료 시간을 push한다.
- 현재 강의 시작 시간이 우선순위 큐 top에 있는 종료 시간보다 이르면 같은 강의실을 쓸 수 없으므로 강의 종료 시간을 push한다. (강의실 개수 +1)
남아있는 pq의 크기가 최소 강의실 개수가 된다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 16926번 배열 돌리기 (C++) (0) | 2022.08.11 |
---|---|
[BOJ] 7569번 토마토 (C++) (0) | 2022.08.11 |
[BOJ] 15681번 트리와 쿼리 (C++) (0) | 2022.08.07 |
[BOJ] 1245번 농장 관리 (C++) (0) | 2022.08.07 |
[BOJ] 23793번 두 단계 최단 경로 1 (C++) (0) | 2022.08.06 |