[프로그래머스 레벨 2 JavaScript] '기능개발' 풀이

glow.soon·2022년 2월 7일
0
post-thumbnail

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42586

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

  while (speeds.length > 0) { // speed 배열길이가 0이 될때까지
    let cnt = 0;
    for (let i = 0; i < speeds.length; i++) { // progress와 speed 짝지어 더하기
      if (progresses[i] < 100) { // 100이 넘어가면 그만 더하기
        progresses[i] += speeds[i];
      }
    }
    while (progresses[0] >= 100) { // 맨앞의 progress배열이 100이 넘으면 shift
      progresses.shift();
      speeds.shift(); // speed도 shift
      cnt++;
    }
    if (cnt > 0) {
      answer.push(cnt);
    }
  }
  return answer;
}

다른 풀이

function solution(progresses, speeds) {
  let answer = [];
  let days = progresses.map((progresses, idx) =>
    Math.ceil((100 - progresses) / speeds[idx])
  );
  let cnt = 1;
  let maxDay = days[0];

  for (let i = 1; i < days.length; i++) {
    if (days[i] <= maxDay) {
      cnt++;
    } else {
      maxDay = days[i];
      answer.push(cnt);
      cnt = 1;
    }
  }
  answer.push(cnt);
  return answer;
}

Ceil() - 올림 함수
days 배열에는 예시 1로 들면 [7,3,9] 가 들어가 있다
maxDays변수는 days[0]으로 초기화 시켜주고, days배열을 순회한다
현재 순회하는 배열 인덱스의 값이 maxDays보다 작으면 cnt증가, 반대이면 maxDays를 현재 배열 인덱스값으로 할당하고 cnt를 answer에 삽입, cnt는 다시 1로 초기화

profile
세상은 모르는 것 투성이

0개의 댓글