BOJ

BOJ 1931 회의실 배정

홍code 2022. 3. 10. 11:34

문제 링크 : https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

요약

한개의 회의실이 있다. N개의 회의의 시작시간과 끝 시간이 주어져 있을 때, 회의가 겹치지 않게 회의실을 사용할 수 있는 회의의 최대 개수를 구하는 문제.

풀이

예제 값을 한번 그림으로 나타내보았다.

시작점을 기준으로 정렬해준다.

맨 앞에 막대(회의시간)를 현재 값으로 두고 순서대로 탐색하면서 현재의 막대의 끝점과 같은 시작점이 나오면 카운트해준다. 탐색 중에 현재 막대의 끝점보다 더 빠른 끝점을 가진 막대가 나오면 현재 막대로 그것을 바꿔준다. 끝까지 탐색이 끝나면 카운트한 값을 출력해준다.

코드

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<pair<int, int>>q;
pair<int, int>now;
int n,s,e,cnt=1;
int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> s >> e;
		q.push_back({ s,e });
	}
	sort(q.begin(), q.end());
	now = q[0];
	for (int i = 1; i < q.size(); i++) {
		if (now.second > q[i].second)
			now = q[i];
		else if (now.second <= q[i].first) {
			now = q[i];
			cnt++;
		}
	}
	cout << cnt << "\n";
}