문제를 잘못 이해하는 것에서부터 풀어내는 데에 시간이 꽤나 많이 걸렸던 문제. 처음에는 여러 개의 회의실
로 착각해서 아예 풀이 방향이 달랐고, 다음에는 “모든 경우의 수를 고려해야하나?” 고려하다보니 문제를 푸는 것이 어려웠다.
이 문제를 해결하는 방법의 주요 포인트를 시작시간이 아닌 종료 시간
을 기준으로 정렬하자는 것이었다. 종료 시간을 기준으로 정렬하게 되면 같은 시간대에 최대한 많은 횟수의 회의를 열 수 있기 때문이다. 지금까지 풀어온 greedy 문제와는 결이 조금 달라서 당황을 많이했는데, 경험치를 더 늘려나가자!
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N;
vector<pair<int, int>> meeting;
int curr_time=0;
int count=0;
cin >> N;
for (int i=0; i<N; i++){
int start, end;
cin >> start >> end;
meeting.push_back(make_pair(end, start));
}
sort(meeting.begin(), meeting.end());
for (int i=0; i<N; i++){
if (curr_time <= meeting[i].second){
curr_time = meeting[i].first;
count++;
}
}
cout << count;
return 0;
}