먼저 각 작업의 끝나는데 걸리는 날 ( vector<int> endDay(progresses_size, 0) ) 을 구한 다음, 그 값을 토대로 answer를 찾으려 했습니다.
endDay 를 순회하면서 endDay 의 최댓값을 기록하는 변수 temp 와 answer에 push_back할 변수 cnt를 선언했습니다. temp가 갱신되는 순간, answer에 cnt 를 push_back합니다. 최댓값으로 기록된 변수 temp 가 변경되는 시점은 그간 앞의 작업이 끝나길 기다리는 작업들이 temp 일 만큼 걸리는 작업이 끝났으므로 배포가 가능하게 되는 시점입니다.
코드
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
int progresses_size = progresses.size();
vector<int> answer;
vector<int> endDay(progresses_size, 0);
// 각 작업의 끝나는데 걸리는 날을 구하기
int day = 0, endJob = 0;
while(endJob < progresses_size){
day++;
for(int i = 0; i < progresses_size; i++){
if(progresses[i] >= 100) continue;
progresses[i] += speeds[i];
if(progresses[i] >= 100){
endDay[i] = day;
endJob++;
}
}
}
int temp = endDay[0], cnt = 1;
for(int i = 1; i < progresses_size; i++){
if(temp < endDay[i]){
temp = endDay[i];
answer.push_back(cnt);
cnt = 0;
}
cnt++;
}
answer.push_back(cnt);
return answer;
}