function solution(progresses, speeds) {
let day = []
for(let i=0; i<progresses.length; i++) {
let n = Math.ceil((100 - progresses[i]) / speeds[i])
day.push(n)
}
let answer = []
let n = 1; let maxDay = day[0]
for(let i=1; i<=day.length; i++) {
if(day[i] <= maxDay) { n++ }
else {
maxDay = day[i]
answer.push(n)
n = 1
}
}
return answer
}
첫번째 for문
은 작업이 완료되기 까지 걸리는 날짜를 구하여 day
에 저장하는 반복문이다. 이때, n
은 무조건 올림수여야 하기 때문에 ceil
을 사용한다.
작업 완료까지 2.1일이 걸리는 경우 -> 배포는 3일째에 하기 때문
두번째 for문
은 배포 날짜를 answer
에 저장하는 반복문이다. n
은 N일째에 배포되는 기능의 개수를 저장하고, maxDay
는 앞선 날짜 중 배포까지 가장 오래 걸리는 날이다.(== 숫자가 가장 큼)
만약 day
의 i값이 maxDay
보다 작다면 즉, 기능 개발이 먼저 끝나면 n
에 1을 더한다. 반대의 경우에는 maxDay
를 i값으로 바꿔주고, 카운팅한 n
을 answer
에 저장한다. 그리고 다시 카운팅 하기 위해 n
을 1로 바꿔준다.
처음 코드에서는
if(day[i] < maxDay)
라고 썼는데, 몇몇 케이스에서 실패가 나왔다. 그래서 반례로 [90, 90, 90, 90],[30, 1, 1, 1],[1, 3]를 추가해서 문제를 다시 풀었는데...
그냥 <를 <=로 수정하면 되는 부분이었다.;;