택배상자

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;
}
}