# [스택/큐][Lv2] 기능개발 - 자바스크립트

# 프로그래머스 문제

https://programmers.co.kr/learn/courses/30/lessons/42586?language=javascript (opens new window)

# 시도 1.

생각한대로 코딩했는데 한번에 풀렸다.,,

  • CompletedProcessCnt 하루동안 작업 완료된 기능의 수를 담을 정수 변수
/*
- 진도가 100%일 때 서비스에 반영가능
- 각 기능의 개발속도는 모두 다름
- 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있음 -> 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포
- progresses : 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열
- speeds : 작업의 개발 속도가 적힌 정수 배열
- return : 각 배포(최소 1일)마다 몇 개의 기능이 배포되는지
*/
function solution(progresses, speeds) {
    var answer = [];
    let _progresses = progresses;
    
		// 진도가 100%인 서비스는 배열에서 빠질 것이므로 배열이 빌때까지 loop
		// loop 한번 도는 것 = 하루
    while( _progresses.length !== 0 ){
        var CompletedProcessCnt = 0;
        
        // 기능 별 개발속도 더하기(하루 간 작업 한 것)
        for(var i=0; i<_progresses.length; i++){
            _progresses[i] += speeds[i];
        }
        
        // 만약 첫번째 기능이 개발 완료 되었다면 맨 앞 요소를 추출, 
        // 뒤에 개발 완료 된 서비스들도 함께 배포 되어야 하므로 while loop
        while( _progresses[0] >= 100 ){
            CompletedProcessCnt++;
            _progresses.shift();
            speeds.shift();
        }        
        
        if( CompletedProcessCnt !== 0 ) answer.push(CompletedProcessCnt);
    }
    
    return answer;
}
정확성  테스트
테스트 1통과 (0.09ms, 30.1MB)
테스트 2통과 (0.47ms, 30.2MB)
테스트 3통과 (0.58ms, 29.7MB)
테스트 4통과 (0.14ms, 29.9MB)
테스트 5통과 (0.09ms, 30MB)
테스트 6통과 (0.12ms, 30MB)
테스트 7통과 (0.55ms, 30.1MB)
테스트 8통과 (0.14ms, 30.2MB)
테스트 9통과 (0.42ms, 30.3MB)
테스트 10통과 (0.44ms, 30.4MB)
테스트 11통과 (0.08ms, 30.1MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

# 다른 사람 답변 통해 배워보기

  1. 내 코드의 경우 초기 작업진도가 1이고, 작업 속도가 1인 경우 loop를 99번 돌아야 한다. 하지만 다음 코드의 경우 아예 계산을 해서 처리했다.

    let beforeCommitDay = 0;
    
    progresses.map((a, i) => {
            let day = Math.ceil((100 - a) / speeds[i]);   
    
            if(day > beforeCommitDay) {
                answer.push(1)
                beforeCommitDay = day 
            }
            else {
                answer[answer.length - 1]++
            }
        })
    
Last Updated: 8/11/2022, 5:17:02 AM