[프로그래머스] 기능개발 - javsacript

📌 문제

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

📌 풀이

function solution(progresses, speeds) {
  var answer = [];
  let stack = [];
  let cnt = 0;
  for (let i = 0; i < progresses.length; i++) {
    stack[progresses.length - 1 - i] = Math.ceil(
      (100 - progresses[i]) / speeds[i]
    );
  }
  while (stack.length > 0) {
    let num = stack.pop();
    cnt++;
    while (num >= stack[stack.length - 1] && stack.length > 0) {
      stack.pop();
      cnt++;
    }
    answer.push(cnt);
    cnt = 0;
  }
  return answer;
}

✔ 전형적인 stack 자료구조를 이용하여 푸는 문제이다.

✔ stack의 끝에서부터 첫번째 progress가 끝나는데 걸리는 일 수를 저장한다.

✔ Math.ceil() 사용하여 (100 - progresses[i]) / speeds[i] 이 소수점이 나온다면 무조건 올림한다.

✔ stack의 top부터 더 큰값을 만나기 전까지 cnt를 1씩 더해주고 큰 값을 만나면 answer에 cnt를 저장한 후 0으로 초기화한다.

✔ 난이도 : 프로그래머스 기준 LEVEL 2

좋은 웹페이지 즐겨찾기