각 기능은 진도가 100%일 때 배포될 수 있다.
하지만 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발되어도, 앞에 있는 기능이 배포될 때 함께 배포된다.
각 배포마다 몇 개의 기능이 배포되는지를 배열로 리턴한다.
progresses | speeds | return |
---|---|---|
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2] |
function solution(progresses, speeds) {
현재 완성 진도 : [95, 90, 99, 99, 80, 99] (%)
완성까지 걸리는 시간 : [5, 10, 1, 1, 20, 1] (일) <-- 이 배열이 필요하다.
1. 완성까지 걸리는 시간을 새로운 배열(days)로 구한다.
남은 일수를 구하는 공식 : Math.ceil((100 - progress) / speed)
2. 이렇게 구한 days로..
큐를 하나 만들고 첫번째 요소를 넣어둔다.
카운트 변수를 하나 만들고 초기값으로 1을 준다.
결과를 담을 배열(result)을 하나 만든다.
반복문(배열을 순회하며) {
만약 (요소가 큐의 맨 앞 요소보다 작다면) {
요소를 하나씩 큐에 넣고, 카운트를 1 증가시킨다.
}
만약 (요소가 큐의 맨 앞 요소보다 크다면) {
result 배열에 카운트를 넣고,
카운트를 1로 초기화시키고,
큐에 이 요소만 담는다.
}
}
반복문이 끝나면, result 배열에 남은 카운트를 넣는다.
result를 리턴한다.
}
function solution(progresses, speeds) {
const days = progresses.map((el, idx) => {
return Math.ceil((100 - el) / speeds[idx])
});
const queue = [days[0]];
let count = 1;
const result = [];
for (let i = 1; i < days.length; i++) {
if (days[i] <= queue[0]) {
queue.push(days[i]);
count++;
} else {
result.push(count);
count = 1;
queue = [days[i]];
}
}
result.push(count);
return result;
}
function solution(progresses, speeds) {
const days = progresses.map((el, idx) => {
return Math.ceil((100 - el) / speeds[idx])
});
let count = 1;
let maxDay = days[0]; // maxDay라는 변수에 최대값 저장해두기
const result = [];
for (let i = 1; i < days.length; i++) {
if (days[i] <= maxDay) {
count++;
} else {
result.push(count);
count = 1;
maxDay = days[i];
}
}
result.push(count);
return result;
}
생각해보니 큐를 만들지 않았어도 풀 수 있었구나..
function solution(progresses, speeds) {
let answer = [0];
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let maxDay = days[0];
for(let i = 0, j = 0; i< days.length; i++){
if(days[i] <= maxDay) {
answer[j] += 1;
} else {
maxDay = days[i];
answer[++j] = 1;
}
}
return answer;
}
이건 내일 이해해보자 ^^..