[자바스크립트] 프로그래머스 기능개발

hoonie·2021년 8월 16일
0

알고리즘

목록 보기
14/15

function solution(progresses, speeds) {
    var answer = [];
    let count = 1;
    let standard = ((100-progresses[0])/speeds[0])
    let standardCeil = Math.ceil(standard)
    for(let i=1; i<progresses.length;i++) {
        let day = ((100-progresses[i])/speeds[i])
        let ceil = Math.ceil(day)
        if(standardCeil < ceil) {
            console.log(ceil)
            standardCeil = ceil
            answer.push(count);
            count=1
        }
        else {
            count++
        }
    }
    answer.push(count);
    return answer;
}

문제풀이

progresses 는 현재 작업된 진도의 퍼센티지이고, speeds는 하루에 진도를 나갈 수 있는 퍼센티지이다. 각 진도별로 며칠걸리는지 계산하기 위해

        let day = ((100-progresses[i])/speeds[i])
        let ceil = Math.ceil(day)

를 사용했다. 예를들어 진도량이 30퍼이고 하루 작업속도가 30퍼이라고 치고 위 식에 대입해보면 ((100-30)/30) 이므로 2.xxxx 가 나온다. 하지만 뒤에 소수점이 나오면 안되기 때문에 ceil 메서드를 활용하여 무조건 올림 처리를 해버린다. 때문에 3일의 작업 기간이 걸리게된다.

첫번째 작업의 소요기간을 standardCeil이라는 변수에 기준점으로 초기화한다.
즉,

기준 소요기간 7일 -> 두번째 작업 소요기간은 3일로 기준 보다 금방 끝나 배포를 못하여 count+1 -> 세번째 작업 소요기간은 9일로 기준보다 오래걸림 -> 기준점을 9일로 갱신 -> 현재 count 횟수인 2를 answer에 push함 -> 다시 count를 1로 초기화함 -> for문의 종료 된 후 현재 count 값인 1을 한번 더 push 하여 최종값 리턴

감사합니다

0개의 댓글