🧩PS/🥈Nomal
[C/C++] 백준 19598번 - 최소 회의실 개수
Cocoon_
2021. 4. 10. 19:38
반응형
<코드>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef pair<int, int> pii;
int N, s, e, ans, cnt;
vector<pii> v;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> s >> e;
v.push_back({ s, 1 });
v.push_back({ e,-1 });
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
cnt += v[i].second;
ans = max(ans, cnt);
}
cout << ans << '\n';
}
풀이 방법
변수 cnt의 의미를 현재시간 기준으로 사용하고 있는 회의실의 개수로 정의하겠습니다.
cnt값의 최댓값이 최소한으로 필요한 회의실의 개수입니다.
그리고 벡터에는 {시작시간, 1}와 {종료시간, -1}으로 넣고 정렬을 하였습니다.
입력 예시)
5
5 15
0 40
15 30
5 15
10 20
정렬된 벡터
{0, 1}
{5, 1}
{5, 1}
{10, 1}
{15, -1}
{15, -1}
{15, 1}
{20, -1}
{30, -1}
{40, -1}
시간이 0일 때
- 2번 회의 시작
- cnt = cnt + 1
- 결과 : cnt = 1
시간이 5일 때
- 1, 4번 회의 시작
- cnt = cnt + 2
- 결과 : cnt = 3
시간이 10일 때
- 5번 회의 시작
- cnt = cnt + 1
- 결과 : cnt =4
시간이 15일 때
- 1, 4번 회의 종료
- 3번 회의 시작
- cnt = cnt - 2 + 1
- 결과 : cnt = 3
시간이 20일 때
- 5번 회의 종료
- cnt = cnt - 1
- 결과 : cnt = 2
시간이 30일 때
- 3번 회의 종료
- cnt = cnt - 1
- 결과 : cnt = 1
시간이 40일 때
2번 회의 종료
cnt = cnt - 1
결과 : cnt = 0
시간이 10일 때 cnt이 4이며 최댓값이므로 정답은 4개이다.
19598번: 최소 회의실 개수
서준이는 아빠로부터 N개의 회의를 모두 진행할 수 있는 최소 회의실 개수를 구하라는 미션을 받았다. 각 회의는 시작 시간과 끝나는 시간이 주어지고 한 회의실에서 동시에 두 개 이상의 회의
www.acmicpc.net
풀이 참고 블로그 - sys09270883.github.io/ps/69/
반응형