728x90
회의실을 최대한 많이 배정할 때의 개수를 구하는 문제입니다.
처음에는 짧은 회의를 중심으로 구현을 했는데
예를들어 회의가 3개고
1번 회의 : 1~10시
2번 회의 : 9~12시
3번 회의 : 11 ~ 20시
다음과 같을때 짧은 2번회의를 우선하게되면
1, 3번 회의는 시간이 다르지만 진행할 수 없게 됩니다.
그래서 끝나는 시간을 우선으로 생각해보았습니다.
1. 가장 먼저 끝나는 시간 확인
2. 시작 시간이 이미 끝난 회의랑 겹치지 않는지
3. 같은 시간에 시작하는 회의가 있다면 짧은것을 먼저 시작
먼저 같은 시간에 시작하는 회의가 있을때 짧은것을 시작하기 위해
sort함수로 시작시간을 정렬해주었습니다.
그리고 먼저 끝나는 시간을 확인하기 위해
sort함수로 종료시간을 정렬해주었습니다.
시작 시간이 이미 끝난 회의랑 겹치지 않는지 확인하기 위해
time이라는 변수를 주어 우선순위가 높은 회의가 되면 종료시간을 저장해두었습니다.
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
vector<pair<int, int>> v;
bool sortbysec(const pair<int, int>& a, const pair<int, int>& b)
{
return (a.second < b.second);
}
int main(int argc, char* argv[])
{
int n;
long long time = 0;
int endTime = 0;
int count = 0;
cin >> n;
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x;
cin >> y;
v.push_back(make_pair(x, y));
}
sort(v.begin(), v.end());
sort(v.begin(), v.end(), sortbysec);
for (int i = 0; i < n; ++i) {
if (v[i].first >= time) {
++count;
time = v[i].second;
}
}
cout << count << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 2352번 반도체 설계 (0) | 2019.08.28 |
---|---|
[C++] 백준 2188번 축사 배정 (0) | 2019.08.27 |
[C++] 백준 1806번 부분합 (0) | 2019.08.27 |
[C++] 백준 10828번 스택 (0) | 2019.08.26 |
[C++] 백준 1107번 리모컨 (0) | 2019.08.26 |