Search
Duplicate
📗

최소 회의실 개수

주차
문제번호
언어
C++
티어
골드
유형
자료구조
그리디
정렬
스위핑
우선순위 큐
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

문제접근

강의실의 개수를 여러개로 할 수 있기 때문에 끝나는 시간으로 정렬을 하면 회의실 개수의 최소값을 구할 수 없음
방을 만들 필요 없는 경우에도 만들어버릴수도 있음
강의실을 시작시간으로 정렬하고, pq에 끝나는 시간을 넣어 다음 강의실의 시작시간과 비교하면서 강의실이 새로 필요한지를 구함

놓쳤던 부분

answer 변수 따로 필요없이 pq.size()로 답을 구할 수 있었음

코드

3320 KB

44 ms

#include <iostream> #include <vector> #include <algorithm> #include <utility> #include <queue> using namespace std; bool cmp(const pair<int, int> &p1, const pair<int, int> &p2) { if (p1.first == p2.first) return (p1.second < p2.second); return (p1.first < p2.first); } int main(void) { int n; vector<pair<int, int> > time; priority_queue<int, vector<int>, greater<> > pq; int answer = 1; ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; time.resize(n); for (int i = 0; i < n; i++) cin >> time[i].first >> time[i].second; sort(time.begin(), time.end(), cmp); pq.push(time[0].second); for (int i = 1; i < n; i++) { if (pq.top() <= time[i].first) pq.pop(); else answer++; pq.push(time[i].second); } cout << answer; return (0); }
C++
복사