

이렇게 A → C → B의 순서로 처리하면 각 작업의 요청부터 종료까지 걸린 시간의 평균은 9ms(= (3 + 7 + 17) / 3)가 됩니다.
각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다)
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool comp(const vector<int> &a,const vector<int> &b){
return a[1] <= b[1];//작업시간이 짧은 순서대로
}
int solution(vector<vector<int>> jobs) {
int answer = 0,cnt=jobs.size(), time = 0 ;
sort(jobs.begin(), jobs.end(),comp); //소요시간이 짧은 순서대로 정렬
while(!jobs.empty()){ //모든 작업을 수행할 때 까지 실행
for(int i = 0 ; i < jobs.size() ; i ++){
if(jobs[i][0]<=time){ //현재 시간이 작업이 요청되는 시간과 같거나 클때만
time+=jobs[i][1];
answer+=(time - jobs[i][0]);
jobs.erase(jobs.begin() + i);
break;
}
//작업을 수행할 수 없으면 현재시간에 +1
if(i == jobs.size() -1) time++;
}
}
return answer/cnt;
}


=> 처음엔 어떻게 접근해야할 지 조금 막막했는데 전에 알고리즘 스터디하면서 풀었던 기억이 조금씩 났다.
이 방법 말고도 priority_queue를 사용한 방법도 있다.