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