오늘의 알고리즘

[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가 더 작은 게 앞으로 와서 계산해야 합니다.