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

홍인열·2022년 2월 16일
0
post-thumbnail
post-custom-banner

문제

문제원본

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

풀이

function solution(progresses, speeds) {
  const result = [];
  let count = 0; //동시에 완료되는 작업의 수를 나타낸다.

  const remove = () => { //완료된 작업을 제거하는 모듈함수이다.
    count++;
    progresses.shift();
    speeds.shift();
  };

  while (progresses.length > 0) { // 작업배열이 모두 완료될때까지 반복
    while (progresses[0] >= 100) {
      // 작업배열의 첫번째 인자가 100 이상이면 완료상태로, 작업제거모듈이실행되고 바로 다음인자를 확인한다.
      // 다음인자는 다시 작업배열의 첫번째인자가되고 100이상이면 작업제거모듈이 실행된다. 다음작업이 100이 안될때까지.
      remove();
    }
    if (count) { //동시에 완료된 작업이 있을경우
      result.push(count); //결과에 동시완료작업 개수를 추가
      count = 0; // 카운트 초기화
    }

    for (let i = 0; i < progresses.length; i++) { // 모든인자에 작업속도만큼을 1회 더해준후, 다시 while문이 시작된다.
      progresses[i] = progresses[i] + speeds[i];
    }
  }

  return result;
    
}

Refactoring

 while (progresses.length > 0) { 
    ...
    
    for (let i = 0; i < progresses.length; i++) {
      //조건문을 추가하여 완료되지 않은 작업만 작업이 진행되도록한다.
      if(progresses[i] < 100) {
        progresses[i] = progresses[i] + speeds[i];
      }
    }
  }

평균 연산 시간이 소폭 줄어든것을 확인 할 수 있었다.

profile
함께 일하고싶은 개발자
post-custom-banner

0개의 댓글