IT 개발자가 되기위한 여정

컴퓨터 공부를 시작함에 앞서 계획 및 개발에 대한 내용을 풀어나갈 생각입니다.

IT 학습/Algorithums

프로그래머스 - 기능개발 [스택/큐_lv2]

제로시엘 2022. 4. 10. 06:43

사용한 메소드

Math.ceil 메소드

https://hianna.tistory.com/446
계산식 구현은 밑에

함수 통과시 나오는 값

solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]);

-> [5, 10, 10, 10 ,20, 20] (5일차에 1번 , 10일차에 2~4번 20일차에 5~6번 배포)

 

 

Math.ceil을 하는 이유는 예를들어 30%의 완성도를 가지고 매일 30%씩 진행되는 작업의 경우

1일차 -> 60%

2일차 -> 90%

3일차 -> 완료 이며

 

이 숫자를 올림표시하면 3이 나온다.

 

 

Reduce 함수

중복되는 값을 합쳐서 객체의 형태로 만들어준다.

 

Object.values() 메소드

Object.values() 메소드

내장 값을 values만 모아 배열로 만들어준다

https://ko.javascript.info/keys-values-entries

 

Object.keys, values, entries

 

ko.javascript.info

 

Object.values(result) = [1 , 3 , 2] 최종값이 리턴된다.

 

최종적으로 제출한 코드

function solution(progresses, speeds) {
  var answer = [];
  for (let i = 0; i < progresses.length; i++) {
    let temp = Math.ceil((100 - progresses[i]) / speeds[i]);
    answer.push(temp);
    if (answer[i] < answer[i - 1]) {
      answer[i] = answer[i - 1];
    }
  }

  const result = answer.reduce((accu, curr) => {
    accu[curr] = (accu[curr] || 0) + 1;
    return accu;
  }, {});

  answer = Object.values(result);
  return answer;
}

 

다른 사람들의 풀이를 봤는데 속도면에서 크게 차이가 나지 않아서 따로 리펙토링은 하지 않았다.