본문 바로가기

알고리즘(C++)/백준 알고리즘

[백준] C++ 1931번 : 회의실배정

풀이과정


배열에 입력받은 회의의 수를 끝나는 시간 기준으로 오름차순 정렬을 한다.

정렬된 배열에서 시작시간이 CurrTime보다 큰 경우 해당 인덱스의 회의가 끝나는 시간을 CurrTime으로 변경하고

이후 회의 시작시간과 끝나는 시간이 같은 경우를 체크하기 위해 끝나는 시간이 같은 경우들의 시작 시간을 오름차순으로 정렬해줘야한다.

 

진행 과정 설명 

 

코드

 


더보기
 #include <iostream>
using namespace std;

bool cmp1(pair<int,int>* a, pair<int, int>* b) { return a->second < b->second; }
bool cmp2(pair<int, int>* a, pair<int, int>* b) { return a->first < b->first; }
int main()
{
	int N = 0;
	int iCurrTime = 0;
	pair<int, int>* pValue[100000] ;
	int iResult = 0;
	cin >> N;



	for (int i = 0; i < N; ++i) 
	{
		pValue[i] = new pair<int, int>;
		cin >> pValue[i]->first >> pValue[i]->second;
	}

	sort(pValue, pValue+N, cmp1);
	for (int i = 0; i < N; ++i)
	{
		if (iCurrTime <= pValue[i]->first)
		{

			int j = i + 1;
			while ((j < N) && (pValue[i]->second == pValue[j]->second))
			{
				j++;
			}

			sort(pValue + i, pValue + j, cmp2);

			iCurrTime = pValue[i]->second;
			iResult++;
		}
	}

	cout << iResult << endl;
	
	return 0;
}