그리디 알고리즘을 통해 간단하게 해결할 수 있는 문제입니다. 문제를 처음 봤을 때 최근에 풀었던 배낭 문제(Knapsack problem)라고 생각을 하고 노트를 펼쳤는데, 숫자를 적다보니 그냥 단순하게 다음으로 가능한 회의들 중 끝나는 시간만 빠르면 가장 많은 회의를 가질 수 있다는 것을 알 수 있었습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N, start, end;
vector<pair<int, int>> times;
cin >> N;
for(int i = 0; i < N; i++){
cin >> start >> end;
times.push_back(pair<int, int>(end, start));
}
sort(times.begin(), times.end());
int lastTime = 0;
int result = 0;
for(auto t : times){
if(t.second >= lastTime) {
lastTime = t.first;
result ++;
}
}
cout << result;
return 0;
}
처음에 algorithm 라이브러리의 sort 함수에 끝나는 시간을 기준으로 정렬하기위한 compare함수를 정의하여 사용했는데 틀렸습니다.. 정확한 이유를 찾지는 않았지만 pair의 두 번째 인자로 끝나는 시간을 넣었었는데, 두 번째 인자만을 기준으로 정렬하고 첫 번째 인자값은 전혀 정렬이 되지 않아서 틀린거라고 생각이 듭니다. 따라서 먼저 비교하고 싶은 끝나는 시간을 첫 번째 인자로 하고 sort 함수의 비교함수를 default로 주었습니다. 이렇게하면 pair의 첫 번째 인자로 오름차순 정렬 후 두 번째 인자로 오름차순 정렬을 할 수 있습니다.
순례 왔습니다.ㅋㅋㅋ