[Programmers]기능개발(42586번)/JS

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


처음 접근 방법

100-progresses를 하면 남은 진도가 나오고, 이 값에서 speed를 나눠주면 몇 일 걸리는지 구할 수 있다.

각 기능마다 몇 일 걸리는지 배열에 저장해두고

배열의 이전 값과 현재 값을 비교하면서,

이전 값 >= 현재 값 이면 count+1 을 해주고,

이전 값 < 현재 값 이면 answer 배열에 count의 값을 넣어준다.

마지막으로 현재 count의 값을 answer 배열에 넣어주면 끝!

 

function solution(progresses, speeds) {
  var answer = [];
  let day = [];
  for (let i = 0; i < progresses.length; i++) {
    progresses[i] = 100 - progresses[i];
    day[i] =
      progresses[i] % speeds[i] == 0
        ? progresses[i] / speeds[i]
        : Math.floor(progresses[i] / speeds[i]) + 1;
  }

  let count = 1;
  for (let i = 1; i < day.length; i++) {
    if (day[i - 1] < day[i]) {
      answer.push(count);
      count = 1;
    }
    if (day[i - 1] >= day[i]) {
      count++;
    }
  }
  answer.push(count);
  return answer;
}

 

그렇게 해서 나온 코드,,

테스트 케이스 2개 통과하길래 모야 쉽네~ 했는데

그럼 그렇지 

한 번에 통과할리가ㅠㅠ

 

뭔가 조금만 수정하면 될 것 같아서 코드를 계속해서 다시 읽어봤다.


두번째 접근 방법

바보.

풀이가 틀렸다....

이전 값과 현재 값을 비교하면 안되고

기준 값을 정하고, 그 값을 기준으로 봐야되는거였다ㅠㅠ

function solution(progresses, speeds) {
  var answer = [];    
    let day = progresses.map((progresses,index) =>
            Math.ceil((100-progresses)/speeds[index]));
    let temp = day[0];
    let count = 0;
    day.forEach((element)=>{
        if(temp >= element){
            count++;
        }
        if(temp < element){
            answer.push(count);
            count=1;
            temp=element;
        }
        
    })
    answer.push(count);
  return answer;
}

그렇게 해서 나온 코드~!

 

day 배열에 저장하는 것도 더 깔끔하게 고치고 

이전 값이 아니라 기준 값을 정해서 비교하는 걸로 로직을 바꾸니 풀렸다.

생각보다 쉬운 문제여서 푸는게 오래 걸리진 않았다...!

 

for문 안쓰려고 노력중인데 쉽지 않네ㅠㅅㅠ