스택
반복문 => 컨베이어 벨트
stack => 보조 컨베이어 벨트
idx => 주어진 택배상자 번호
주어진 상자와 컨베이어 벨트 위의 상자와 같지 않다면 보조 컨베이어 벨트로 push 합니다.
같다면 택배상자 번호를 증가시키고 정답을 1 증가시킵니다.
보조 컨베이어 벨트 위의 상자가 1개 이상 있고 마지막으로 넣은 상자와 주어진 상자가 같다면 계속 반복
반복이 종료되고 나오면 정답을 반환합니다.
function solution(order) {
let answer = 0;
const stack = [];
let idx = 0;
for (let i = 1; i <= order.length; i++) {
if (order[idx] !== i) {
stack.push(i);
} else {
idx++;
answer++;
}
while (stack.length !== 0 && stack.at(-1) === order[idx]) {
stack.pop();
idx++;
answer++;
}
}
return answer;
}