기능개발

gicomong·2021년 1월 17일
3
post-thumbnail

5. 기능개발

1) 문제

(1) 문제 정보

(2) 문제 설명

  • 배포 순서대로 작업진도가 적힌 정수 배열 progresses
  • 각 작업의 개발 속도가 적힌 정수 배열 speeds
  • 두 가지 배열이 주어질 때, 각 배포마다 몇 개의 기능이 배포되는지를 return해보자.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정한다.
  • 입출력 예
progressesspeedsreturn
[93, 30, 55][1, 30, 5][2, 1]
[95, 90, 99, 99, 80, 99][1, 1, 1, 1, 1, 1][1, 3, 2]
a.첫번째 기능 
: 93% 완료, 하루에 1%씩 작업 가능 => 7일간 작업 후 배포 가능
b. 두번째 기능
: 30% 완료, 하루에 30%씩 작업 가능 => 3일간 작업 후 배포 가능
: but, 첫 번째 기능이 미완성된 상태이므로 첫번째 기능이 배포되는 7일째 배포가능
c.세 번째 기능
: 55%가 완료, 하루에 5%씩 작업이 가능 => 9일간 작업 후 배포 가능
d. 따라서 7일째에 2개의 기능, 9일째에 1개의 기능이 배포.

2) 풀이

이 문제는 큐, 스택 문제입니다.

정확성연산시간메모리
100%0.09ms~0.13ms30.2MB


  • a. 모든 progresses에 대해 day값을 구한다.
const days = progresses.map((progress, index) => {
  return Math.ceil((100 - progress) / speeds[index]);
});

  • b. i는 기준 인덱스, j는 비교할 인덱스이다.
let i = 0;
let j = i + 1;

  • e. while문의 장점은, 조건에 부합하지 않으면 해당 while문이 중단한다는 점이다.
   while (true) {
        //c. while문을 시작한다.
        
        let passNum = 1;   //그 날 배포한 갯수
        if (i >= days.length) break;  
        //d.기준인덱스가 days.length를 넘어가면 while문을 중단한다.
        
        //e
        while (days[j] <= days[i]) {  //f. 기준값 <= 비교값
            j++;
            passNum++;
        }
        
        //g. 기준값 > 비교값
        answer.push(passNum);
        i = j;  //h. 배포된 것 이후부터 다시 비교
        j++;    //i. passNum이 1부터 시작이므로 j = j+1로 할당
        //j. while 반복 끝 -> 다시 위로 이동
    }
    return answer;
}
profile
이전에 본 포스팅이 없다구요? 티스토리로 이사갔어요! (새 글은 이제 티스토리에서 개재합니다~)

0개의 댓글