Programmers.js - 기능개발

박요셉·2024년 10월 3일

초기 풀이

const getDays = (progresses, speeds) => {
    const days = []
    for(let i = 0; i < progresses.length; i++){
        days.push(Math.ceil((100 - progresses[i])/speeds[i]))
    } 
    return days
}

function solution(progresses, speeds) {
    var answer = [];
    const days = getDays(progresses, speeds)
    let max = days[0];
    let count = 0;
    days.forEach((fixed, idx, origin) => {
        if(fixed > max) {
            answer.push(count); 
            
            if(idx === days.length-1) return answer.push(1)
            
            count = 0
        }
        max = Math.max(max,fixed)
        if(fixed <= max) {
            count += 1
            if(idx === days.length-1)answer.push(count)
        }
    })
    
    console.log(days)
    return answer;
}

개선한 풀이

const getDays = (progresses, speeds) => {
    const days = []
    for(let i = 0; i < progresses.length; i++){
        days.push(Math.ceil((100 - progresses[i])/speeds[i]))
    } 
    return days
}

function solution(progresses, speeds) {
    var answer = [];
    const days = getDays(progresses, speeds)
    let max = days[0];
    let count = 1;
    for(let i = 1; i < days.length; i++){
        if(max >= days[i]){
            count++
        } else{
            answer.push(count)
            max = days[i]
            count = 1
        }
    }
    answer.push(count)
    
    return answer;
}

조건 처리 부분이 조금 복잡하다는 느낌이 들어 수정하였음
days[0]은 무조건 count에 들어가니 count = 1, for문의 i는 1부터 시작하게 하였고, 조건부 로직을 간소화함.

profile
개발자 지망생

0개의 댓글