programmers/Lv 2

택배상자 [자바]

Meluu_ 2025. 1. 20. 17:23

 

🧫 문제 분석

✔️ 출처

택배상자 level 2

📖 문제

 

메인 컨테이너 벨트는 1부터 n까지 순서대로 한쪽 방향으로 내려옴

보조 컨테이너 벨트는 stack구조, LIFO 

 

주어진 입출력(order)의 요소들을 순서이면서 택배상자 번호라고 가정하고 풀이한다.

 

1. order[i]의 택배상자 번호 전까지 메인 벨트의 상자를 보조 컨테이너 벨트에 넣는다.

2. order[i]의 택배상자 번호와 현재 메인 벨트 상자의 번호가 같은지 확인한다.

3. order[i]의 택배상자 번호와 보조 벨트의 입구쪽 상자의 번호가 같은지 확인한다. 

4. 2,3 번 둘다 아니라면 더이상 실을 수 없으므로 종료한다. 

5. 이를 order의 모든 상자수만큼 반복한다. 

 


🔅 문제 풀이

import java.util.Stack;

class Solution {
    
    // 상자는 1부터 n까지 순서대로 내려옴
    // 기사가 알려준 순서로 택배상자를 실어야함
    // 보조 컨테이너 벨트 : stack 구조
    // 보조써도 기사가 알려준 순서대로 못싣는다면 더이상 X
    
    public int solution(int[] order) {
        Stack<Integer> subBelt = new Stack<>();
        int boxNum = 1, idx = 0;
        int answer = 0;
        
        while (idx < order.length) {
    
            // 알려준 순서에 맞는 택배상자 번호 전까지 보조 벨트에 옮기기
            while (boxNum < order[idx]) {
                subBelt.push(boxNum++);
            }
            
            // 순서와 메인 컨테이너벨트의 상자 번호가 같다면
            if (order[idx] == boxNum) {
                answer++;
                boxNum++;
                idx++;
                
                // 보조벨트에 있다면 
            } else if (!subBelt.isEmpty() && order[idx] == subBelt.peek()) {
                subBelt.pop();
                answer++;
                idx++;
                
                // 둘다 없다면 그만 싣는다.
            } else {
                break;
            }
        }
        
        return answer;
    }
}

❗ 오답노트 / 필요한 지식

  1. 괜찮은 문제인것 같다. 

 

'programmers > Lv 2' 카테고리의 다른 글

쿼드압축 후 개수 세기 [자바]  (0) 2025.01.23
숫자 변환하기 [자바]  (0) 2025.01.21
뒤에 있는 큰 수 찾기 [자바]  (0) 2025.01.16
혼자서 하는 틱택토 [자바]  (0) 2025.01.14
연속된 부분 수열의 합 [자바]  (0) 2025.01.04