[프로그래머스 레벨 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
FE Developer

0개의 댓글

관련 채용 정보