https://school.programmers.co.kr/learn/courses/30/lessons/131704#
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
int len = order.length;
int[] belt = new int[len];
int val = 1;
for(int o : order)
{
belt[o-1] = val++;
}
int[] boxcnt = new int[len+1];
Arrays.fill(boxcnt, 1);
boolean bStop = false;
int need = 1;
int beltidx = 0;
while(true)
{
int box = belt[beltidx];
if(need != box)
{
if(stack.isEmpty() || stack.peek() != need)//보조벨트 꺼내도 해결 안된다
{
if(boxcnt[box] == 0)//벨트에도 숫자가 남지 않음 중단
{
//System.out.println("stop,"+need+","+box);
bStop = true;
break;
}//벨트에 숫자가 남았다면 현재 벨트의 택배는 보조벨트로 이동
else
{
//System.out.println("push,"+box+",need,"+need);
boxcnt[box] = 0;
stack.push(box);
}
}
else//보조벨트 꺼내서 싣기
{
//System.out.println("pop,"+need+",peek,"+stack.peek());
stack.pop();
answer++;
need++;
beltidx--;
}
}
else//트럭 실음
{
//System.out.println(need);
boxcnt[box] = 0;
answer++;
need++;
}
if(need > len)
{
//System.out.println("stop,"+need+","+box);
break;
}
beltidx++;
if(beltidx >= len)
beltidx = len-1;
}
return answer;
}
}