[ 알고리즘풀이 ]

time[i] : i번 째 기능이 완성되는데 걸리는 시간.

--> time[i] = ((100 - progresses[i]) / speeds[i] ) + 1; // (100 - progresses[i]) % speeds[i] 가 0이 아니라면.
     time[i] = (100 - progresses[i]) / speeds[i];  // (100 - progresses[i]) % speeds[i] 가 0이라면.

 

 각각 기능별로 필요한 시간을 구하고, 앞에서부터 순회하며 한 번에 처리할 수 있는 최대 작업량을 count 한다. 현재 기준이 되는 time[i] 보다 작거나 같은 값들은 한 번에 처리할 수 있으므로 while 문을 통해 count 해주고, answer에 push 해준다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    int time[100]={};
    for(int i = 0; i < progresses.size(); i++){
        if((100 - progresses[i]) % speeds[i])
            time[i] = ((100 - progresses[i]) / speeds[i] ) + 1;
        else
            time[i] = (100 - progresses[i]) / speeds[i];
    }
    vector<int> answer;
    int i = 0, count = 0, s = time[0];
    while(i < progresses.size()){
        while(i < progresses.size() && s >= time[i]){
            count++;
            i++;
        }
        answer.push_back(count);
        if(i < progresses.size()){
            count = 0;
            s = time[i];
        }
    }   
    return answer;
}

 

+ Recent posts