프로그래머스/스택, 큐
[스택] 프로그래머스 '택배상자' - js
bbeyak
2023. 5. 4. 21:33
반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131704#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 코드
function solution(order) {
let answer = 0;
let main = order.reverse(); // pop이 shift 보다 시간 덜 소요 되므로 주문 역순
let left = order.map((el,idx) => idx+1).reverse(); // 컨테이너 벨트 역순
let sub = []; // 보조 컨테이너(stack)
while(true){
// 택배를 모조리 보조 컨테이너 옮긴 후 보조 컨테이너에 택배가 없을 때 break
if(!left.length && !sub.length) break;
if(left.length && main[main.length-1] === left[left.length-1]){
answer++;
left.pop();
order.pop();
}
else if(sub[sub.length-1] === main[main.length-1]){
sub.pop();
answer++;
order.pop();
}else{
// 보조 컨테이너에 옮기거나 트럭에 넣을 남은 택배도 없고,
// 다음 순서 택배가 보조 컨테이너에서 꺼낼 수 있는 택배와 다른 경우
// 더 이상 진행할 수 없으므로 break
if(!left.length && main[main.length-1] !== sub[sub.length-1]) break;
else{
sub.push(left[left.length-1]); //메인 컨테이너에 택배 있다면 보조컨테이너에 옮기기
left.pop();
}
}
}
return answer;
}
복기
6/19
반응형