728x90
반응형
https://www.acmicpc.net/problem/20126
20126번: 교수님의 기말고사
교수님이 시험을 시작할 수 있는 시각을 출력하여라. 시작 가능한 시각이 여러 개 있으면 그중 가장 앞선 시각을 출력한다. 시험을 치룰 수 없다면 -1을 출력하여라.
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m, s, x, y;
vector<pair<int, int>> v;
cin >> n >> m >> s;
for(int i = 0; i < n; i++){
cin >> x >> y;
v.push_back({x, y});
}
sort(v.begin(), v.end());
// 1. 앞쪽에 시간이 비는 경우
if(v[0].first >= m){
cout << 0 << endl;
return 0;
}
// 2. 중간에 시간이 비는 경우
int tmp = 0;
for(int i = 0; i < n; i++){
if(v[i].first - tmp >= m) {
cout << tmp << endl;
return 0;
}
tmp = v[i].first + v[i].second;
}
// 3. 뒤쪽에 시간이 비는 경우
if(s - tmp >= m) cout << tmp << endl;
else cout << -1 << endl;
return 0;
}
시험이 시작하는 시간과 진행 시간을 쌍으로 벡터에 넣고 오름차순으로 정렬한다.
1. 앞쪽에 시간이 비는 경우
맨 처음 시작하는 시간이 m보다 같거나 크면 앞쪽에 시간이 비는 것이므로 0분부터 시험을 치를 수 있다.
2. 중간에 시간이 비는 경우
이전 시험이 끝나는 시간을 tmp로 두고 다음 시험이 시작하는 시간에서 tmp를 뺀 시간이 m보다 같거나 크면 시간이 비는 것이므로 tmp분부터 시험을 치를 수 있다.
3. 뒤쪽에 시간이 비는 경우
강의실을 이용할 수 있는 마지막 시간(s)에서 마지막 시험이 끝나는 시간(tmp)를 뺀 시간이 m보다 같거나 크면 뒤쪽에 시간이 비는 것이므로 tmp분부터 시험을 치를 수 있다.
뒤쪽에도 시간이 비지 않는다면 시험을 치룰 수 없는 것이므로 -1을 출력한다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 11659번 구간 합 구하기 4 (C++) (0) | 2022.03.06 |
---|---|
[BOJ] 17298번 오큰수 (C++) (0) | 2022.03.05 |
[BOJ] 24523번 내 뒤에 나와 다른 수 (C++) (0) | 2022.03.03 |
[BOJ] 2493번 탑 (C++) (0) | 2022.03.03 |
[BOJ] 15988번 1, 2, 3 더하기 3 (C++) (0) | 2022.02.25 |