프로그래머스 택배상자 JavaScript
2022년 12월 31일
제한사항
- 1 ≤ order의 길이 ≤ 1,000,000
- order는 1이상 order의 길이 이하의 모든 정수가 한번씩 등장합니다.
- order[i]는 기존의 컨테이너 벨트에 order[i]번째 상자를 i+1번째로 트럭에 실어야 함을 의미합니다.
문제 풀이
현재 order의 값과 컨테이너 벨트에 상자 값을 비교해 같으면 바로 트럭에 싣는다.
order의 값이 컨테이너 벨트에 상자 값보다 클 때는 order 값 보다 작은 컨테이너 상자들을 다 서브 컨테이너 벨트에 넣어두고 order 값의 상자를 트럭에 싣는다.
order의 값이 컨테이너 벨트에 상자 값 보다 작을 경우에는 서브 컨테이너 벨트의 맨 오른쪽 값과 비교해 같으면 서브 컨테이너 벨트에서 빼 트럭에 싣는다.
다른 경우 종료
solution.js
function solution(order) {
let answer = 0;
const subBelt = new Array();
let idx = 1;
for (let i = 0; i < order.length; i++) {
if (order[i] == idx) {
idx++;
answer++;
}
else if (order[i] > idx) {
for (let j = idx;j < order[i]; j++) {
subBelt.push(j);
}
idx = order[i]+1;
answer++;
}
else {
if (subBelt.pop() === order[i]) {
answer++;
}
else break;
}
}
return answer;
}