쓸데없는 생각을 너무 많이 했다. 단순 SJF 알고리즘인데 매 회차마다 순서를 정렬하려는 생각을 했다. 단순하게 시도해보겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_cows(vector<pair<int, int>>& cows)
{
int i, N;
int arrive_time, test_time;
cin >> N;
for (i = 0; i < N; i++)
{
cin >> arrive_time >> test_time;
cows.push_back({ arrive_time, test_time });
}
return;
}
bool compare(pair<int, int> A, pair<int, int> B)
{
if (A.first == B.first)//도착시간이 같다면?
{
return A.second < B.second;//검사시간이 짧은 소 우선
}
else
{
return A.first < B.first;
}
}
void find_answer(vector<pair<int, int>>& cows)
{
int answer = 0;
int i;
sort(cows.begin(), cows.end(), compare);
answer = cows.front().first + cows.front().second;
for (i = 1; i < cows.size(); i++)//가장 앞에 소 계산했으니 제외
{
if (answer < cows[i].first)//대기중인 소가 없음
{
answer = cows[i].first + cows[i].second;
}
else//대기중인 소가 있음
{
answer = answer + cows[i].second;
}
}
cout << answer << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<pair<int, int>> cows;
input_cows(cows);
find_answer(cows);
return 0;
}