알고리즘 공부
백준 회의실 배정
컴퓨터과학
2023. 7. 17. 23:32
https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
아 첨에 dfs로 풀었는데 시간 초과가 발생해서
흠 그리드 알고리즘을 참고하니 훨씬 간단하게 풀었습니다.
어렵네요.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Meeting {
int start;
int end;
};
bool compare(const Meeting& a, const Meeting& b) {
if (a.end == b.end) {
return a.start < b.start;
}
return a.end < b.end; // 종료 시간을 기준으로 정렬
}
int main() {
int N; // 회의의 개수
cin >> N;
vector<Meeting> meetings(N); // 회의 정보를 저장할 벡터
for (int i = 0; i < N; i++) {
cin >> meetings[i].start >> meetings[i].end;
}
// 회의를 종료 시간을 기준으로 정렬
sort(meetings.begin(), meetings.end(), compare);
int max_count = 1; // 최소한 첫 번째 회의는 가능하므로 1로 초기화
int end_time = meetings[0].end; // 첫 번째 회의의 종료 시간을 기준으로 설정
for (int i = 1; i < N; i++) {
if (meetings[i].start >= end_time) {
// 현재 회의의 시작 시간이 이전 회의의 종료 시간보다 크거나 같으면
// 회의실을 사용할 수 있으므로 개수를 증가시키고 종료 시간을 갱신
max_count++;
end_time = meetings[i].end;
}
}
cout << max_count << endl;
return 0;
}