본문 바로가기

프로그래머스 문제/Level 2

[프로그래머스] 기능개발 - 자바스크립트

문제 설명

 

 

문제풀이

1. 내가 분 문제 풀이다. 설명은 주석으로 남겨 놓았다.

function solution(progresses, speeds) {
  let answer = [];
  let finalCount = [];
  // 배열 answer에 남은 기간을 나타내는 값을 넣어준다.
  for(let i = 0; i <= progresses.length - 1; i ++) {
    let j = 1;
    while(progresses[i] < 100) {
      progresses[i] += speeds[i];
      if(progresses[i] >= 100) {
        answer.push(j);
      }
      j++;
    }
  }
  
  // 남은 기간 answer 배열을 이용하여 뒷 부분에 값을 보고 temp에 개수를 체크해주는 로직이다.
  let temp = 1;
  let prev = answer[0];
  for(let i = 1; i < answer.length; i ++) {
    let curr = answer[i];
    if(prev >= curr) {
      temp += 1;
    } else {
      finalCount.push(temp);
      prev = curr;
      temp = 1;
    }
  }
  finalCount.push(temp);
  return finalCount;
}

 

2. 제일 깔끔하고 정확한 모범 답안이다.

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

  for(let i = 0, j = 0; i< days.length; i++){
      if(days[i] <= maxDay) {
          answer[j] += 1;
      } else {
          maxDay = days[i];
          answer[++j] = 1;
      }
  }

  return answer;
}

 

 

실행결과

 

 

코드 채점하고 제출

 

  확실히 레벨 2가 되니까 레벨 1에서 할 수 있는 능력 +a 를 요구하는 것을 느꼈다.