택배상자

magicdrill·2025년 5월 14일
0

택배상자

import java.util.*;

class Solution {
    public int solution(int[] order) {
        int answer = 0;
        int i, idx, count = 0, current;

        Queue<Integer> primary_belt = new LinkedList<>();
        Stack<Integer> secondary_belt = new Stack<>();

        // 1부터 order.length까지 큐에 삽입
        // 사실 큐는 필요없음
        for (i = 1; i <= order.length; i++) {
            primary_belt.offer(i);
        }

        idx = 0; // order 배열 인덱스
        while (true) {
            // 먼저 스택에서 확인 (top이 order[idx]와 같으면 pop)
            while (!secondary_belt.isEmpty() && secondary_belt.peek() == order[idx]) {
                System.out.println("보조벨트에서 제거 " + secondary_belt.peek());
                secondary_belt.pop();
                idx++;
                count++;
            }

            // 큐가 비어있다면 더 이상 꺼낼 수 있는 상자 없음
            if (primary_belt.isEmpty()) {
                break;
            }

            // 큐에서 상자를 하나 꺼냄
            current = primary_belt.poll();

            if (current == order[idx]) {
                // 바로 실을 수 있다면
                idx++;
                count++;
            } else {
                // 아니면 스택에 보관
                System.out.println("보조벨트에 저장 " + current);
                secondary_belt.push(current);
            }
        }
        answer = count;

        return answer;
    }
}

0개의 댓글