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

이아현·2023년 8월 18일
0

코딩테스트

목록 보기
28/31
post-thumbnail

출처 프로그래머스 - 기능개발

📃 문제

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

👩🏻‍💻 풀이

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

  // newProgresses : 남은 일수를 계산
  let newProgresses = progresses.map((progress, index) =>
    Math.ceil((100 - progress) / speeds[index])
  );

  // max : 기능개발 시간이 더 걸리는 날
  let max = newProgresses[0];

  // newProgresses의 요소들을 순회하면서 max값 기준으로 answer에 값을 차곡차곡 쌓아나가기
  // i : 순회를 위한 횟수
  // j : answer의 인덱스 번호
  for (let i = 0, j = 0; i < newProgresses.length; i++) {
    // max값보다 작거나 같은 경우에는 누적
    if (newProgresses[i] <= max) {
      answer[j] += 1;
    } else {
      // max값보다 큰 경우에는 다음날로 넘어가기
      max = newProgresses[i];
      answer[++j] = 1;
    }
  }
  return answer;
}

console.log(solution([93, 30, 55], [1, 30, 5]));
  • newProgresses에서 기능개발에 남은 날짜들을 계산해두고, max값과 비교하면서 날짜를 계산해내는 방법으로 문제를 해결!
  • 처음에 내가 생각한대로 문제를 풀었는데 max값과 비교하면서 날짜를 계산하는 것을 구현하지 못해서 다른 사람들의 코드를 참고했다. 풀고나니까 어떻게 풀어야할지 감이 오는데 풀기 전에 구현해내기까지의 과정이 너무 어려웠다. 구현력을 높여야할 필요성이 있다!
profile
PM을 지향하는 FE 개발자 이아현입니다 :)

0개의 댓글