- 각 기능별로
(100-progress)/(speed)
를 올림으로 계산해 몇 일뒤에 완성되는지 알아낸다.- 앞기능이 뒷기능보다 남은 일수가 많이 남았다면, 앞기능의 남은 일수보다 적은 뒷기능들을 같이 배포한다.
function solution(progresses, speeds) {
let fin_days = speeds.map((_,i) => Math.ceil((100-progresses[i])/speeds[i]));
let result = [];
let prev = fin_days.shift();
let cnt = 1;
while(fin_days.length) {
let next = fin_days.shift();
if(prev >= next) {
cnt++;
} else {
result.push(cnt);
cnt = 1;
prev = next;
}
if(!fin_days.length) result.push(cnt);
}
return result;
}
스택/큐 문제이고 최대 길이도 100이여서, 최대한 값을 뽑아내면서(?) 풀어가고 싶었다.
변수가 많고 조건에 따라 값을 바꿔주는 것도 많아서 가독성이 조금 떨어지는 듯하다.
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;
}
for문을 정의할 때 for문 내부에서 사용하는 변수
j
를 같이 넣어준 게 기발하다. 증감연산자로 데이터를 넣을 배열의 인덱스를 바꾸는 것도 좋아보였다. 나중에 나도 써봐야지.