[프로그래머스]스택/큐 - 기능개발

·2021년 10월 1일
0

코테문제풀기

목록 보기
9/57

문제확인

https://programmers.co.kr/learn/courses/30/lessons/42586

문제풀이

function solution(progresses, speeds) {
    var answer = [0];
    var times = [];
    var time = 0;
    var maxday = 0;
    
    for(var i = 0; i < progresses.length; i++){
        //남은 %를 속도로 나눠 몇 일 남았는지 얻기
        time = parseInt((100 - progresses[i]) / speeds[i]);
        //하루는 무조건 걸리니까 나머지 몫이 0이 나와도 1로 해주기
        if((100 - progresses[i]) % speeds[i] != 0){
            time += 1;
        }
        //times배열에 구한 time 순서대로 대입
        times.push(time);
    }

     for(var i = 0, j = 0; i < times.length; i++){
         //앞에 있는 기능이 더 오래걸리면 뒷 기능이 배포될 수 없다
         //걸리는 시간이 같아도 함께 배포되니까 조건에 필요
         //카운트는 0에서 시작하니까 맨 처음 인덱스를 위해서도 필요
         if(times[maxday] >= times[i]){
         //앞 기능과 뒷 기능이 함께 배포되어야 하므로 ++로 함께 배포할 개수 카운트 해주기
             answer[j]++;
             
         //앞 기능보다 뒷 기능이 더 오래걸리면 그냥 배포하면 됨
         } else { 
             //한번에 배포할 개수가 정해졌으니 
             //다음으로 한번에 배포할 개수를 카운트하기 위해 최대값을 현재 i(times의 인덱스)로 바꿔줌
             maxday = i
             //다음으로 한번에 배포될 개수를 카운트하기 위해 j(answer의 인덱스)를 다음으로 이동
             //answer = [0];으로 선언되있어서 다음 인덱스에 값을 넣어줘야 에러가 안남
             //무조건 한 개 이상은 배포하게 되니 1로 넣어줌
             answer[++j] = 1;
         }
     }

    return answer;
}

0개의 댓글