작업 a b c d e f 가 있다고 가정 :
1) a 완료시 e f 완료됨, 나머지 미완료시 : 그럼 a만 배포 (e f 는 d 가 배포될때 까지 배포 안됨)
2) a 완료시 b c d f 완료됨, 나머지 미완료시 : 그럼 a b c d 만 배포 (작업 순서 기준 연속배포 가능, 그러나 f 는 e미완료로 배포안됨)
중간에 미완성이 껴있으면 그 뒤로 완성이여도 함께 배포 못함.
조건부 순차적 연속배포 가능.
solution([40, 93, 30, 55, 60, 65],
[60, 1, 30, 5, 10, 7])
1일차 : 0 idx 완료 ==> 0 idx 배포
4일차 : 2 idx, 4 idx 완료 ==> but, 1 idx 배포안돼서 2idx 배포 x / 2, 3 idx 안돼서 4 idx 배포 x
5일차 : 5 idx 완료 ==> but 2, 3, 4 안돼서 배포 x
7일차 : 1 idx 완료 ==> 1 idx,2 idx 배포 완료
9일차 : 3 idx 완료 => 3,4,5 배포 완료
결과
: [1, 2, 3]
function solution(progresses, speeds) {
var answer = [];
while (progresses.length !== 0) {
let count = 0 // 결과값 출력할 count
progresses = progresses.map((curr, idx) => { // 진도율을 더해준다
return curr + speeds[idx]
})
if(progresses[0] >= 100) { // 만약 0번째 idx가 100이넘으면 바로 출력 후 출력되는 것들은 제거
progresses.shift()
speeds.shift()
count++
for(let i = 0; i < progresses.length; i++) {
if(progresses[i] >= 100) { // i번째 progresses가 100넘으면 count
count++
if(progresses[i + 1] < 100 || typeof progresses[i + 1] === "undefined") {
// i번째 progresses가 100넘고, 그 다음 숫자가 100이 넘지 않거나 값이 없으면 그 뒤에 idx들도 출력이 되지 않기때문에 출력된 i번째까지 제거해주고 break;
progresses = progresses.slice(i+1)
speeds = speeds.slice(i+1)
break;
}
} else { // i번째가 100이 넘지않아도 출력되지 않으니 break;
break;
}
}
}
if(count !== 0) {
answer.push(count)
}
}
return answer;
}
초반에 객체로 만들어서 100이 넘는지 안 넘는지 비교했었는데({vlaue : 120, sucess : true}) 그럴 필요 없이 progresses의 값으로만 비교하면 됐었다..