문제 - 택배상자
문제를 처음 읽었을 때 약간 문제가 이해가 되지않았다.
1. 1 ~ N까지 순서대로 택배상자가 들어온다.
2. 택배기사가 원하는 order대로 상자를 트럭에 싫어야한다.
3. 만약 들어온 택배상자가 order와 맞지 않는 상자면 보조 컨베이어 벨트에 실어 저장을 한다.
보조 컨베이어 벨트는 가장 마지막에 보조 컨테이너 벨트에 보관한 상자부터 꺼내게 된다.
4. 보조 컨베이어 벨트를 이용해도 택배기사가 원하는 order와 맞지 않으면 더이상 상자를 싣지 않는다.
보조 컨베이어 벨트는 FIFO이므로 stack을 이용하여 만들어준다. 그런 다음에 기존 컨베이어 벨트에서 꺼내는 상황하고 보조 컨베이어 벨트에서 꺼내는 것을 구현해준다.
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
//보조 컨베이어 벨트
Stack<Integer> stacks = new Stack<>();
int n = order.length;
//기존 컨베이어 벨트에서 꺼냄 1~n
for(int i = 1;i <= n;i++)
{
//현재 번호와 순서가 일치하는 경우
if(order[answer] == i)
{
answer++;
}
//현재 번호와 순서가 일치하지 않은 경우 보조컨베이어 벨트에 저장
else{
stacks.add(i);
}
//보조 컨베이어 벨트에서 꺼내기
while(!stacks.isEmpty() && stacks.peek() == order[answer])
{
answer++;
stacks.pop();
}
}
return answer;
}
}