백준 - 1931 회의실배정

문제

회의의 시작시간과 끝나는 시간이 주어질 때 최대한 많이 회의를 할 수 있는 수는?

생각

할 수 있는 제일 빨리 끝나는 미팅을 선택하구, 끝나구 다음에도 빨리 끝나느 미팅을 선택..
이러면 제일 많이 미팅을 할 수 있다!!
빨리 끝나면 그 이후 시간 부터 또 다른 회의를 할 수 있게 되니까아~~

끝나는 시간이 빠른 순으로 정렬하구 (pair<끝나는시간,시작시간> 순으로 저장해서 사용)
for 문으로 돌면서 시작 시간이 시작할 수 있는 시간이면 그 회의를 잡는다~~

코드

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

int n, result;
vector<pair<int, int>> meeting;

int main() {
	int temp1, temp2, nowTime;

	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> temp1 >> temp2;
		meeting.push_back(make_pair(temp2, temp1));
	}
	
	sort(meeting.begin(), meeting.end());

	
	nowTime = 0;
	for (int i = 0; i < n;i++) {
		if (meeting[i].second >= nowTime) {
			result++;
			nowTime = meeting[i].first;
		}
	}

	cout << result;

	return 0;
}

좋은 웹페이지 즐겨찾기