본문 바로가기

자료구조+알고리즘/Programmers

[프로그래머스-level2] 기능개발 (javascript)

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

[풀이]

- 각 기능은 진도가 100% 일 때 배포 가능

- 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발되더라도 앞에 있는 기능이 배포될 때 함께 배포 ---> Queue 활용

 

 

 

Math.ceil() 

 

Math.ceil() - JavaScript | MDN

The Math.ceil() static method always rounds up and returns the smallest integer greater than or equal to a given number.

developer.mozilla.org

: 반올림하여 가장 작은 정수 반환함

ex) 

console.log(Math.ceil(0.95)) // 1

 

 

 

[코드]

function solution(progresses, speeds) {
  var answer = [0]; //stack 넣을 공간

  // 각각의 기능이 배포되는데 걸리는 시간을 구한다.
  const releaseDays = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
  // console.log('🍀', releaseDays); //[ 7, 3, 9 ]
  
  let max = releaseDays[0];

  for(let i = 0; i < releaseDays.length; i++) {
    if(releaseDays[i] <= max){
      answer[answer.length - 1] += 1;
    }else{
      max = releaseDays[i];
      answer.push(1);
    }
  }
  console.log('🍀', answer);
  return answer; 
}

solution([93, 30, 55], [1, 30, 5]) //test1

 

 

<test1>

releadays = 각각 process 를 speeds 에 진도 100이 될 때 걸리는 시간을 구한다 [7, 3, 9]

 

3번 for 문 돌리면서

i=0 | releadays[0] <= releadays[0]

         ans[0] = 1 // 

i=1 | releadays[1] <= releadays[0]

         ans[0] = 2 // 

i=2 | releadays[2] <= releadays[0]

         else -> max =  releadays[2]

                      ans = [2, 1]

 

 

 

<test2> [95, 90, 99, 99, 80, 99].  [1, 1, 1, 1, 1, 1]

releadays = [5, 10, 1, 1, 20, 1]

 

6번 for문 돌리면서

i=0 | releadays[0] <= releadays[0]

         ans[0] = 1 // 

i=1 | releadays[1] <= releadays[0] | 10 <= 5 (x else 로)

         else -> max =  releadays[1] = 10

                      ans = [1, 1]

i=2 | releadays[2] <= releadays[1] | 1 <= 10

         ans[1] = +1 // ans = [1, 2]

i=3 | releadays[3] <= releadays[1] | 3 <= 10

         ans[1] = +1 //  ans = [1, 3]

i=4 | releadays[4] <= releadays[1] | 20 <= 10  (x else 로)

        else -> max =  releadays[4] = 20

                      ans = [1, 3, 1]

i=5 | releadays[5] <= releadays[4] | 1 <= 20

         ans[2] = +1 // ans = [1, 3, 2] 

 

728x90
반응형