문제출처 : https://www.acmicpc.net/problem/6068
code
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N, i, time;
cin >> N;
vector<pair<int, int>> arr(N);
for (i = 0; i < N; i++)
cin >> arr[i].second >> arr[i].first;
sort(arr.begin(), arr.end(),greater<>());
time = arr[0].first - arr[0].second;
for (i = 1; i < N; i++)
{
if (time <= arr[i].first)
time -= arr[i].second;
else
{
time = arr[i].first;
time -= arr[i].second;
}
}
if (time > 0)
cout << time;
else
cout << -1;
return 0;
}
pair로 묶어서 내림차순정렬후에,
거꾸로, 거슬러올라가다보면 나중에 결과가 음수 또는 양수로 나오는데,
양수로 나오면 늦잠을 자도된다는 뜻이고,
음수가 나오면 아무리 일찍일어나도 모든 일을 끝낼수가 없다는 뜻이므로 -1을 출력해준다.
골드문제가 대체적으로 어렵다고 느꼈었는데, 생각보다 쉬운듯.