본문 바로가기

백준/실버

[백준 14469번] 소가 길을 건너간 이유 3 (C++)

문제링크 : https://www.acmicpc.net/problem/14469

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;

int N, a, b;
vector<pii>v;

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    cin >> N;

    for(int i=0; i<N; i++)
    {
        cin >> a >> b;
        v.push_back({a, b});
    }

    sort(v.begin(), v.end());
    int time = v[0].first + v[0].second;

    for(int i=1; i<N; i++)
    {
        time = max(time, v[i].first); //시작시간
        time += v[i].second; //검문시간 더해주기
    }

    cout << time;

    return 0;
}

 

간단한 정렬문제이다.

처음 도착시간을 기준으로 정렬을 해준다.

이후 해당 도착시간 + 검문시간을 해주면 다음 소의 출발시간이 된다.

 

첫 번째 소의 해당 출발 시간을 기준으로 해당 출발 시간과 다음 소의 도착 시간 중 큰 값을 고르고,

여기에 해당 소의 검문 시간을 더해 또 다음 소의 출발시간이 된다.

 

이런식으로 누적하여 갱신된 출발시간에 계속하여 검문시간이 더해진 것이 최종 결과값이 된다.