[ 알고리즘풀이 ]
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;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 문자열 압축 - travelbeeee (0) | 2020.04.15 |
---|---|
[Programmers] [3차] n진수 게임 - travelbeeee (0) | 2020.04.13 |
[Programmers] 2 x n 타일링 - travelbeeee (0) | 2020.03.16 |
[Programmers] 종이접기 - travelbeeee (0) | 2020.03.13 |
[Programmers] 탑 - travelbeeee (0) | 2020.03.12 |