오늘의 알고리즘
[C++] 백준 1931 회의실 배정
하늘하늘 .
2022. 9. 2. 16:07
#include<iostream>
#include<algorithm>
#include<vector>
bool cmp(std::pair<int, int> pair1, std::pair<int, int> pair2)
{
if (pair1.second == pair2.second)
return pair1.first < pair2.first;
return pair1.second < pair2.second;
}
int main()
{
int N = 0;
int iStart = 0;
int iEnd = 0;
std::cin >> N;
std::vector<std::pair<int, int>> vec(N);
for (int i = 0; i < N; ++i)
{
std::cin >> vec[i].first >> vec[i].second;
}
std::sort(vec.begin(), vec.end(), cmp);
int iTime = vec[0].second;
int iMax = 1;
for (int i = 1; i < N; ++i)
{
if (iTime <= vec[i].first)
{
++iMax;
iTime = vec[i].second;
}
}
std::cout << iMax;
return 0;
}
처음에 출발시간으로 고민하면서 문제를 풀었더니 메모리 초과, 문제 틀림...
결과시간을 기준으로 소트를 하고 문제를 풀었더니 더 쉬웠습니다.
결과시간이 제일 작은 것을 맨 앞으로 오게 한 후 결과 시간에 따라 N번만 돌리면 최대갯수를 구할 수 있었습니다.
그래도 틀린다면 cmp에서 두번째줄이 중요합니다.
회의시간이 그 시간 바로 끝날 수도 있기 때문에 무조건 first가 더 작은 게 앞으로 와서 계산해야 합니다.