기능개발(프로그래머스)

정승옥(seungok)·2020년 12월 23일
0

프로그래머스

목록 보기
26/40
post-thumbnail

문제설명

  • 각 기능은 진도가 100%일때 서비스 반영
  • 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포
  • 작업의 진도가 적힌 정수 배열 progresses, 각 작업의 개발 속도가 적힌 정수 배열 speeds
  • 각 배포마다 몇 개의 기능이 배포되는지 반환

제한사항

  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하
  • 작업 진도는 100미만의 자연수
  • 작업 속도는 100이하의 자연수
  • 배포는 하루에 한 번만 할 수 있으며 하루의 끝에 이루어짐

풀이

function solution(progresses, speeds) {
    let check=1; // 브레이크포인트
    const result = []; // 결과값
    // 모든 개발이 끝나면 종료
    while(progresses.length !== 0){
        // 루프를 돌때마다 진도에 개발속도를 더해줌
        progresses = progresses.map((progress,idx)=>progress += speeds[idx]);
        // 제일 앞에 있는 개발이 진도 100이 될때
        if(progresses[0] >= 100){
            // 다음 개발목록들 중 진도가 100미만인 개발의 인덱스 check 저장
            // 모든 개발목록들이 진도가 100이상이면 인덱스+1 check 저장
            for(let i=1;i<progresses.length;i++){
                if(progresses[i]<100){
                    check = i;
                    break;   
                }else{
                    check = i+1;
                }
            }
            // progresses와 speeds배열을 check값만큼 잘라내고 progresses만 결과값에 저장
            result.push(progresses.splice(0,check).length);
            speeds.splice(0,check);
        }
    }
    return result;
}

+ 다른 해결 방법 추가

function solution(progresses, speeds) {
	const result = [];
	while (progresses.length > 0) {
		progresses = progresses.map((progress, index) => progress + speeds[index]);
		if (progresses[0] >= 100) {
			let endProgress = 0;
			while (progresses[0] >= 100) {
				progresses.shift();
				speeds.shift();
				++endProgress;
			}
			result.push(endProgress);
		}
	}
	return result;
}

체크포인트

  • progresses와 speeds는 일심동체...메모...
  • 이전 코드는 , 스택 개념을 활용하지 않아 splice 메소드를 사용했다.
  • shift 메소드로 불필요한 변수 선언을 줄였다.
profile
Front-End Developer 😁

0개의 댓글