반응형
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int n; //회의의 수
int t1, t2;
int result = 1; //회의의최대개수 첫번째경우
int result2 = 1; //회의의최대개수 두번째경우
vector<pair<int, int>>v; //회의시작 종료시간 저장할 vector
bool cmp(pair<int, int> p1, pair<int, int>p2) //비교함수, 회의의 시작시간을 기준으로 오름차순정렬, 같은 경우 종료시간 비교
{
if (p1.first == p2.second)
return p1.second < p2.second;
else
return p1.first < p2.first;
}
bool cmp2(pair<int, int> p1, pair<int, int>p2) //회의의 종료시간 기준으로 오름차순 정렬
{
if (p1.second == p2.second)
return p1.first < p2.first;
else
return p1.second < p2.second;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> t1 >> t2;
v.push_back({ t1,t2 });
}
sort(v.begin(), v.end(), cmp); //정렬
int start = v[0].first;
int end = v[0].second;
for (int i = 1; i < v.size(); i++)
{
if (end <= v[i].first) //회의의 시작시간이 현재회의의 종료시간보다 같거나 큰경우
{
result++; //개수증가
start = v[i].first; //회의 시간 저장
end = v[i].second;
}
}
sort(v.begin(), v.end(), cmp2);
start = v[0].first;
end = v[0].second;
for (int i = 1; i < v.size(); i++)
{
if (end <= v[i].first)
{
result2++;
start = v[i].first;
end = v[i].second;
}
}
if (result < result2)
result = result2;
cout << result;
return 0;
}
후기
처음에는 재귀함수를 활용해서 시도해봤지만 정답은 나와도 시간초과가 계속나왔다. 이후 정렬 후 확인하는 방향으로 시도했지만 계속틀렸다. 문제를 다시 읽어보니 회의가 끝나는 것과 동시에 다음회의를 진행할 수 있다는 글을 보고 확인할때 <를 <= 로 변경하니 맞았다. 앞으로는 문제를 꼼꼼히 읽어봐야겠다.
반응형
'Programming > Baekjoon' 카테고리의 다른 글
백준 7562 나이트의이동 [c++] (0) | 2022.06.06 |
---|---|
백준 1932 정수삼각형 [c++] (0) | 2022.06.05 |
백준 2583 영역구하기 [c++] (0) | 2022.06.02 |
백준 11286 절댓값 힙 [c++] (0) | 2022.05.31 |
백준 1012 유기농배추 [c++] (0) | 2022.05.31 |