택배상자

LJM·2023년 8월 30일
0

programmers

목록 보기
91/92

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;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글