풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/42586
완성까지 남은 기간을 담은 배열을 만들고(remains)
remains의 반복을 돌면서
앞의 수보다 큰 수가 나오면 세트로 배포되고, 앞의 수보다 작은 수가 나오면 새로운 배포가 된다.
[5, 10, 1, 1, 20, 1]=> 5, 10 / 1, 1, 20 / 1 => [2, 2, 1]
이렇게 되어야 하므로
remains[0] = 5 | 첫 기능은 무조건 먼저 배포되므로 초기값으로 1 추가 | answer = [1]; |
remains[1] = 10 | remains[0] < remains[1]이므로 함께 배포됨. answer[마지막요소]++; | answer = [2]; |
remains[2] = 1 | remains[1] > remains[2]이므로 새로운 배포 추가됨. answer.push(1); | answer = [2, 1]; |
remains[3] = 1 | remains[2] < remains[3]이므로 함께 배포됨. answer[마지막요소]++; | answer = [2, 2]; |
remains[4] = 20 | remains[3] < remains[4]이므로 함께 배포됨. answer[마지막요소]++; | answer = [2, 3]; |
remains[5] = 1 | remains[4] > remains[5]이므로 새로운 배포 추가됨. answer.push(1); | answer = [2, 3, 1]; |
function solution(progresses, speeds) {
if(progresses.length < 1) return [];
var answer = [1];
// 완성까지 몇일이 걸리는지 계산한 배열을 만든다.
// [5, 10, 1, 1, 20, 1]
const remains = [];
for(let i = 0; i<progresses.length; i++) {
remains.push(Math.ceil((100-progresses[i])/speeds[i]));
}
// 반복을 돌면서 앞의 수보다 큰 수가 나올 때까지 센다.
// [1, 3, 2]
let temp = remains[0];
for(let i=1;i<remains.length;i++) {
// 기준이 되는 앞의 수가 더 크면 배포 갯수를 올린다.
if(temp >= remains[i]) {
answer[answer.length-1]++;
} else {
// 더 큰 수가 나타나면 기준이 되는 수를 바꾸고 새로운 배포를 추가한다.
temp = remains[i];
answer.push(1);
}
}
// console.log(answer);
return answer;
}
'Web development > Algorithm' 카테고리의 다른 글
[프로그래머스] 구명 보트 (javascript) (0) | 2021.08.23 |
---|---|
[프로그래머스] 직업군 추천하기 (javascript) (0) | 2021.08.23 |
[프로그래머스] 상호 평가 (javascript) (0) | 2021.08.20 |
[프로그래머스] 부족한 금액 계산하기 (javascript) (0) | 2021.08.20 |
[LeetCode] 55. Jump Game (javascript) (0) | 2021.08.20 |
댓글