프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
우선 progresses의 배열을 speeds에 따른 제출 가능일이 담긴 배열을 만들어야 했다.
[93,30,55]의 진도가 담긴 배열의 speeds [1,30,5]를 적용하여 몇일이 걸리는지 도출해낸다.
그러면 [7,3,9]란 배열이 나와야 한다.
const newA = progresses.map((item,index) => {
return Math.ceil((100-item)/speeds[index]);
})
위의 배열처럼 arra.map 매서드로 부족하더라도 모조리 올림하도록 해서 map을 도출했다.
'각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.'
라는 전제조건에 따라 이제 작은 수가 더 먼저 배포가 가능한 일으로 [7,3,9]라는 배열은
[2,1]로 도출되어야 했다.
하지만 여기서 첫번째 배열요소와 마지막의 경우를 어떻게 해야할지 헷갈렸고,
첫 번째 오답:
function solution(progresses, speeds) {
var answer = [];
let count =1
const newArray = progresses.map((item,index) => {
return Math.ceil((100-item)/speeds[index]);
})
for(let i=1; i<newArray.length+1; i++){
if(newArray[i-1]<newArray[i]){
answer.push(count)
count=1
}else{
count++
}
if(i===newArray.length){
answer.push(count-1)
}
}
return answer;
}
두 번째 오답:
function solution(progresses, speeds) {
var answer = [];
let count =0
const newA = progresses.map((item,index) => {
return Math.ceil((100-item)/speeds[index]);
})
for(let i=0; i<newA.length; i++){
count++
if(newA[i]>=newA[i+1]){
count
}else{
answer.push(count)
count=0
}
}
return answer;
}
테스트 케이스에서만 맞는 답을 내놓았다.
크기를 비교할 때 다음 수와 비교하기만 했는데,
그게 아니라 크기에 따라 변수를 재할당하여 값을 넣도록 했다.
function solution(progresses, speeds) {
var answer = [];
const newA = progresses.map((item,index) => {
return Math.ceil((100-item)/speeds[index]);
})
let max = newA[0];
let count =1;
for(let i=1; i<newA.length; i++){
if(newA[i] <= max){
count++
}else{
max = newA[i];
answer.push(count);
count =1;
}
}
answer.push(count)
return answer;
}