Lv 2. 기능개발

박하린·2021년 6월 12일
0

프로그래머스

목록 보기
28/42

📚 문제

스택-큐 : 기능개발
https://programmers.co.kr/learn/courses/30/lessons/42586

💡 접근

  1. 각 기능마다 개발에 필요한 최소 날짜 수를 구한다.
  2. 뒤에 있는 기능이 날짜 수가 더 적더라도 앞에 있는 기능이 배포될 때 함께 배포되어야 한다. 날짜 수를 비교해서 배열에 배포가능한 수를 넣어 리턴한다.
    밑에서 자세히 설명하겠음

⌨️ 코드

function solution(progresses, speeds) {
  // 각 배포마다 몇 개의 기능이 배포될 수 있는지 저장하는 변수
  let answer = [];
  // 배포를 위해 필요한 날짜를 앞의 기능과 비교하기 위한 변수
  let beforeDay = 0;

  progresses.map((v, idx) => {
    // 각 기능이 개발되는 데 필요한 날짜 수 계산
    let day = Math.ceil((100 - v) / speeds[idx]);

    // 앞에 있는 기능보다 개발 날짜가 크다면 앞에 기능과 같이 배포될 수 없기 때문에 answer 배열에 자신을 배포한다는 표시로 1을 push해준다.
    if (day > beforeDay) {
      answer.push(1);
      beforeDay = day;
      // 앞에 있는 기능보다 개발 날짜가 작다면 같이 배포될 수 있기 때문에 배열의 요소값 + 1 (같이 배포한다는 의미)해준다.
    } else {
      answer[answer.length - 1]++;
    }
  });

  return answer;
}

✅ 코드 리뷰

ex ) progresses : [93, 30, 55], speeds: [1, 30, 5]
- day : [7,4,9]
day[0] : 7 > 0 이므로 answer : [1], beforeday = 7
day[1] : 4 < 7 이므로 answer : [1+1] = [2], beforeday = 4
day[2] : 9 > 4 이므로 answer : [2, 1]

📝 리뷰

자료구조 공부하기

profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보