본문 바로가기

프로그래머스/스택, 큐

[스택] 프로그래머스 '택배상자' - js

반응형

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
반응형