[프로그래머스] 기능개발 - JavaScript

Chloé·2022년 3월 13일
0
post-thumbnail

기능개발 #스택/큐

출처 - 프로그래머스 코딩테스트 고득점 KIT

💡 문제 접근하기

  • 스택/큐로 분류되어 있기는 하지만, 배열 순회로 풀었다.
  1. 우선 각 기능별로 기능이 개발될때까지 소요되는 날짜를 담은 배열을 구한다.
  2. 다음 배포의 기준이 될 날짜를 저장할 변수 release, 이 때 함께 배포되는 기능의 갯수를 저장할 flag로 batch를 설정한다.
  3. 날짜 배열의 첫 수를 release에 할당하고, batch를 1로 설정한다.
  4. 날짜 배열의 두 번째 수부터 배열을 순회하며,
    • release의 숫자와 비교하여 작거나 같다면 batch를 증가시킨다.
    • release의 숫자보다 큰 숫자가 나온다면 이를 release에 바꿔 저장하고, batch에 누적된 수를 answerpush()한 뒤 batch를 1로 초기화한다.
  5. 날짜 배열을 모두 순회한 뒤 마지막으로 batch에 남아있는 숫자를 answerpush() 해주는 것을 잊지 말자!

🔥 문제 풀어보기

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

  // STEP 01. 각 기능이 개발될때까지 소요되는 날짜
  let durations = [];
  for (let i = 0; i < progresses.length; i++) {
    durations.push(Math.ceil((100 - progresses[i]) / speeds[i]));
  }

  // STEP 02. 각 배포때 배포되는 기능
  let release = durations[0];
  let batch = 1;

  for (let i = 1; i < durations.length; i++) {
    if (durations[i] <= release) {
      batch++;
    } else {
      answer.push(batch);
      release = durations[i];
      batch = 1;
    }
  }

  answer.push(batch);

  return answer;
}

👉 큐를 사용하여 풀도록 만들어진 의도대로 풀어본다면

  • for 문으로 durations 배열을 순회하는 대신 배열을 shift()하여 꺼내 비교한다.
profile
클로이 데일리 로그

0개의 댓글