Algorithm/Programmers

💚[Lv.2] 택배상자 : Java

say! 2026. 2. 4. 18:22
728x90
 

코딩테스트 연습 - 택배상자

알고리즘 문제 연습 카카오톡 친구해요! 프로그래머스 교육 카카오 채널을 만들었어요. 여기를 눌러, 친구 추가를 해주세요. 신규 교육 과정 소식은 물론 다양한 이벤트 소식을 가장 먼저 알려

school.programmers.co.kr

 

#고려해야 하는 상황

메인 컨테이너 == 트럭 인 경우

아니면 보조 top == 트럭 인 경우 pop

아니면 메인을 보조 컨테이너로 push

=> 다 막히면 종료

 

import java.util.*;

class Solution {
    public int solution(int[] order) {
        int answer = 0;
        int l = order.length;
        int i = 0;  // order에서 원하는 상자 위치
        int container = 1;  // 컨테이너의 상자 번호
        
        Stack<Integer> sub = new Stack<>();
        while(i < l){
            // 메인 컨테이너에서 꺼낼 수 있는 경우
            if(container == order[i]){
                container++;
                answer++;
                i++;
            }
            else if(!sub.isEmpty() && sub.peek() == order[i]){
                // 보조 컨테이너 top이 트럭 상자인 경우
                answer++;
                i++;
                sub.pop();
            }
            else if(container <= l){
                // 메인 컨테이너에 남아있는 경우
                // 컨테이너에서 보조 컨테이너로 옮기는 경우
                sub.push(container);
                container++;
            }
            else{
                // 다 꺼낼 수 없는 경우
                break;
            }
            
            
        }
        
        return answer;
    }
}