#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;
}
 

소트할 때 앞에 크기를 기준으로 소트하거나 뒤에 크기를 기준으로 소트하는 것을 알아내는 게 중요했던 문제

+ Recent posts