본문 바로가기

Algorithm/BAEKJOON

[BOJ] 7983번 내일 할거야 (C++)

728x90
반응형

https://www.acmicpc.net/problem/7983

 

7983번: 내일 할거야

내일(1일)부터 연속으로 최대 며칠 동안 놀 수 있는지를 출력한다. 가령, 답이 0이면, 내일 과제를 해야 하며, 1 이면, 모레에 과제를 해야 한다.

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool compare(pair<int, int>& a, pair<int, int>& b){
	return a.second > b.second;
}

int main() {
	int n, d, t;
	cin >> n;
	vector<pair<int, int>> v;
	for(int i = 0; i < n; i++){
		cin >> d >> t;
		v.push_back({d, t});
	}
	sort(v.begin(), v.end(), compare);
	
	int day = v[0].second;
	for(int i = 0; i < n; i++){
		int tmp = 0;
		if(v[i].second < day) day = v[i].second;
		day -= v[i].first + tmp;
	}
	
	if(day < 0) cout << 0 << endl;
	else cout << day << endl;
	return 0;
}

먼저 각 과제를 끝내야 하는 시간 순으로 정렬한다. 

첫 번째 과제가 끝나는 시간을 day로 놓고 걸리는 시간을 빼주면 시작하는 시간이 된다.

다음 과제가 이전 과제를 시작하는 시간보다 빠르면 다음 과제가 끝나는 시간을 day로 놓고 걸리는 시간을 빼고,

다음 과제가 이전 과제를 시작하는 시간과 같거나 늦으면 기존 day에서 걸리는 시간을 빼는 과정을 반복한다.

728x90
반응형