https://programmers.co.kr/learn/courses/30/lessons/42586
function solution(progresses, speeds) {
let answer = [0];
const remainingDay = progresses.map((el, idx) => Math.ceil((100-el)/speeds[idx]) )
let maxDay = remainingDay[0]
for(let i=0, j=0; i<remainingDay.length; i++){
if(remainingDay[i] <= maxDay){
answer[j] += 1
} else {
maxDay = remainingDay[i]
j++
answer[j] = 1
}
}
return answer
}
- 기능별 남은 날짜를 계산한다.
- 각 progress를 100에서 빼서 남은 %를 구한다.
- 남은 %를 각 progress별 speed로 나눈다.
- 날짜계산이므로 소수점은 올림해서 남은 날짜를 구한다.
- 남은날짜의 첫번째 value를 maxDay에 할당한다. (가장 오래 걸리는 기능 남은 날짜)
- remainingDay Array에서 다음 가장 오래 걸리는 기능이 나오기 전까지는 이전 가장 오래 걸리는 기능이 끝나야 다음 기간으로 넘어가므로 가장 오래 걸리는 기능의 기간만 잡아주면 된다.
- answer 의 각 value 는 해당 기간에 완성되는 기능 개수
- 현재 기능의 남은 날짜가 maxDay 이하이면 현재 기간에 완성되는 기능 개수 +1
- 현재 기능의 남은 날짜가 maxDay 보다 크면 answer의 다음 요소에 +1
Array.map( (element, index) => return ) : return한 값으로 이루어진 새로운 array 생성
반응형
'알고리즘 > javascript' 카테고리의 다른 글
[프로그래머스] 코딩테스트연습 > 로또의 최고 순위와 최저 순위 (0) | 2021.09.29 |
---|---|
[프로그래머스] 코딩테스트연습 > 완전탐색 > 모의고사 (0) | 2021.09.27 |
[프로그래머스] 코딩테스트연습 > 정렬 > K번째 변수 (0) | 2021.09.25 |
[프로그래머스] 코딩테스트연습 > 해시 > 위장 (0) | 2021.09.25 |
[프로그래머스] 코딩테스트연습 > 해시 > 완주하지 못한 선수 (0) | 2021.09.24 |