개발자로 성장을 위해 프로그래머스 사이트를 이용하여 코딩 테스트 풀이를 꾸준히 하고 있다. 저번에 공부했던 해시 개념에 이어, 오늘은 스택/큐 개념에 대해 공부해보고자 한다.
스택 자료구조는 책을 쌓은 것처럼, 차곡차곡 쌓아 올린 형태의 자료구조를 의미한다.
LIFO(Last In First Out)으로 후입선출 구조이다.
등 LIFO에 해당되는 경우
큐는 줄을 서서 기다린다는 사전적 의미로, 먼저 들어온 게 먼저 나가는 FIFO(First In First Out) 자료 구조를 가진다.
function solution(progresses, speeds) {
// 남은 진행률 계산
let lefts = progresses.map(v => 100-v)
// 배포 완료까지 남을 일정 계산
let leftDays = [];
for(let i=0; i<speeds.length; i++){
leftDays.push(Math.ceil(lefts[i]/speeds[i]))
}
// 첫 번쨰의 기능이 완료되고 배포가 되어야, 남은 순번의 기능이 배포될 수 있다.
// 두 번째 기능이 먼저 완료되었다고 하더라도, 첫 번째 기능이 완료되지 않아 배포되지 않으면, 두 번째 기능을 배포할 수 없다.
let answer = [0];
let completeWork = leftDays[0]
for(let i=0, j=0; i<leftDays.length; i++){
if(leftDays[i] <= completeWork){
answer[j] += 1
} else {
completeWork = leftDays[i]
answer[++j] = 1
}
}
return answer
}