[프로그래머스] 기능개발 Javascript

Derhon·2023년 1월 13일
0

문제풀이

목록 보기
4/13
post-thumbnail

기능개발

나의 답

function solution(progresses, speeds) {
    let answer = [];
    //100이 넘은 값을 제외한 시작 인덱스
    let number = 0;
    //연속으로 배포할 수 있는 개수
    let cnt = 0;
    
    while(true){
        if(number === progresses.length){
            //모든 인덱스를 돌고 끝났을 때
            answer.push(cnt);
            break;
        }
        
        if(progresses[number] >= 100){
            //검사하는 인덱스의 값이 100보다 크다면, 시작인덱스와 배포 개수를 1씩 증가
            number++;
            cnt++;
            continue;
        }else{
            //배포 개수가 0개보다 클 때만 answer에 담음
            if(cnt > 0) answer.push(cnt);
            cnt = 0;
        }
        
        for(let i=number; i<progresses.length; i++){
            //100이 넘을 때까지 반복하며 더해줌
            progresses[i] += speeds[i];
        }
    }
    
    return answer;
}

테스트 케이스를 모두 통과할 수 있는 코드이긴 하다.
하지만 풀면서도 약간 무식하게 푼다는 느낌이 있었다.
그래서 구글링하여 조금 더 개선된 솔루션을 찾을 수 있었다.

추가 답

function solution(progresses, speeds) {
    let answer = [];
    //남은 일수를 담은 배열
    let days = progresses.map((el, index) => Math.ceil((100-el) / speeds[index]));
    let max = days[0];
    let cnt = 0;
    
    for(let i = 0; i < days.length; i++){
        if(days[i] <= max){
            cnt++;
        }else{
            max = days[i];
            answer.push(cnt);
            cnt = 1;
        }
    }
    answer.push(cnt);
    
    return answer;
}

Math.ceil을 통해 아예 남은 일을 배열로 만들어주니, 코드가 한결 가벼워졌다.
로직 자체는 크게 변한 것 같지 않다.

profile
🧑‍🚀 이사했어요 ⮕ https://99uulog.tistory.com/

0개의 댓글