프로그래머스 level2. 스택 / 큐 기능개발

기능 개발 문제링크

문제 설명

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

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

풀이

각각의 소요 시간을 map 으로 구해줍니다. progress(소요 시간)과 배포 우선순위 (maxPriority)를 비교합니다.

먼저, 주어진 progresses와 speeds를 보고 배포가능한 소요 시간(날짜)을 구해주어야 합니다.

const progress = progresses.map((progress, i) =>
  Math.ceil((100 - progress) / speeds[i])
);

배포에 필요한 날짜들의 배열값 [7,3,9] 를 구할 수 있습니다.

배포는 첫번째 값부터 차례대로 되어야 하기때문에 앞에 있는 값이 뒤에 있는 값보다 크거나 같을 경우에만 함께 배포가 가능합니다.

let maxPriority = progress[0];

for (let i = 0, j = 0; i < progress.length; i++) {
  if (progress[i] <= maxPriority) {
    answer[j] += 1;
  } else {
    maxPriority = progress[i];
    answer[++j] = 1;
  }
}

최종 코드

function solution(progresses, speeds) {
  let answer = [0];

  const progress = progresses.map((v, i) => Math.ceil((100 - v) / speeds[i]));

  let maxPriority = progress[0];

  for (let i = 0, j = 0; i < progress.length; i++) {
    if (progress[i] <= maxPriority) {
      answer[j] += 1;
    } else {
      maxPriority = progress[i];
      answer[++j] = 1;
    }
  }

  return answer;
}

알게 된 점

for 문에 초기화를 두번한 코드는 처음인데 매우 유용하다고 생각했습니다.