#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 작업 시간를 기준으로 소트
bool cmp(vector<int> vecFirst, vector<int> vecSecond)
{
if (vecFirst[1] == vecSecond[1])
return vecFirst[0] < vecSecond[0];
else
return vecFirst[1] < vecSecond[1];
}
// 1. 위치 확인 (현재 시간에서 얼마나 더 갔는지)
// 2. 크기 확인 (젤 작은 것부터 시작)
int solution(vector<vector<int>> jobs)
{
// 총 합
int answer = 0;
// 시작 시간
int iLong = 0;
int iSize = jobs.size();
// 들어온 시간을 기준으로 소트
sort(jobs.begin(), jobs.end());
// 1. 시작 시간을 기준으로 소트
// 2. 제일 가까운 혹은 Long 시간보다 먼 곳을 기준으로 소트
for (int i = 0; i < jobs.size(); ++i)
{
if (iLong <= jobs[i][0])
{
sort(jobs.begin(), jobs.begin() + i, cmp);
break;
}
}
while (!jobs.empty())
{
// 들어온 시간
int iStartTime = jobs[0][0];
// 시작 시간이 들어온 시간이 더 먼 경우
// 시작 시간을 들어온 시간으로 변경
if (iLong < iStartTime)
iLong = iStartTime;
// 걸리는 시간
int iLongTime = jobs[0][1];
jobs.erase(jobs.begin());
// 끝난시간
iLong = iLongTime + iLong;
// 마지막 시간을 추가
answer += iLong - iStartTime;
for (int i = 0; i < jobs.size(); ++i)
{
if (iLong <= jobs[i][0])
{
sort(jobs.begin(), jobs.begin() + i, cmp);
break;
}
if (i == jobs.size() - 1)
sort(jobs.begin(), jobs.end(), cmp);
}
}
return answer / iSize;
}
소트할 때 앞에 크기를 기준으로 소트하거나 뒤에 크기를 기준으로 소트하는 것을 알아내는 게 중요했던 문제