# [스택/큐][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인 경우 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]++ } })