프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
function solution(progresses, speeds) {
const result = [];
let count = 0; //동시에 완료되는 작업의 수를 나타낸다.
const remove = () => { //완료된 작업을 제거하는 모듈함수이다.
count++;
progresses.shift();
speeds.shift();
};
while (progresses.length > 0) { // 작업배열이 모두 완료될때까지 반복
while (progresses[0] >= 100) {
// 작업배열의 첫번째 인자가 100 이상이면 완료상태로, 작업제거모듈이실행되고 바로 다음인자를 확인한다.
// 다음인자는 다시 작업배열의 첫번째인자가되고 100이상이면 작업제거모듈이 실행된다. 다음작업이 100이 안될때까지.
remove();
}
if (count) { //동시에 완료된 작업이 있을경우
result.push(count); //결과에 동시완료작업 개수를 추가
count = 0; // 카운트 초기화
}
for (let i = 0; i < progresses.length; i++) { // 모든인자에 작업속도만큼을 1회 더해준후, 다시 while문이 시작된다.
progresses[i] = progresses[i] + speeds[i];
}
}
return result;
}
while (progresses.length > 0) {
...
for (let i = 0; i < progresses.length; i++) {
//조건문을 추가하여 완료되지 않은 작업만 작업이 진행되도록한다.
if(progresses[i] < 100) {
progresses[i] = progresses[i] + speeds[i];
}
}
}
평균 연산 시간이 소폭 줄어든것을 확인 할 수 있었다.