프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
progresses | speeds | return |
---|---|---|
[93,30,55] | [1,30,5] | [2,1] |
[95,90,99,99,80,99] | [1,1,1,1,1,1] | [1,3,2] |
progresses
(이하 p
) 배열을 순회하면서 speeds
(이하 s
) 배열의 같은 인덱스의 원소를 p
배열의 원소에 더한다.p
배열의 첫 번째 원소가 100
보다 같거나 큰지 while
문으로 검사한다. p
배열의 앞에서부터 100
이 나오지 않을때까지 순회해야 하루에 배포될 원소의 수를 셀 수 있기 때문이다.stack
배열에 p
배열과 s
배열의 맨 앞 원소를 떼서 집어넣는다. s
배열도 떼줘야 하는 이유는, 2 번 풀이에서 p
에 같은 인덱스의 s
원소를 더해주기 때문이다. stack
배열이 비어있지 않으면, answer
배열에 stack
배열의 길이를 삽입하고, 다음 날의 배포를 계산하기 위해, 다음 날의 배포를 계산하기 위해 stack
배열을 비운다.function solution(progresses, speeds) {
var answer = [];
let stack = [];
while(progresses.length > 0) {
for(let i = 0; i < progresses.length; i++) {
if(progresses[i] < 100){
progresses[i] += speeds[i];
}
}
while(progresses[0] >= 100) {
stack.push(progresses.shift());
speeds.shift();
}
if(stack.length !== 0) {
answer.push(stack.length);
stack = [];
}
}
return answer;
}