mondegreen

[240418] 알고리즘 리부트 51일차 - 프로그래머스 택배상자 자바 본문

알고리즘 풀이 및 리뷰/프로그래머스

[240418] 알고리즘 리부트 51일차 - 프로그래머스 택배상자 자바

앙갱 2024. 4. 18. 23:20
반응형

지문에서 보조 컨테이너 벨트는 스택으로 구현해야 함을 파악할 수 있었다. 앞에 위치한 상자와 보조 컨테이너 벨트를 모두 체크해야 했고 두 곳에서 찾을 수 없는데 앞에 위치한 상자보다 실어야 할 상자 수가 더 작다면 더 실을 수 있는 가능성이 없기 때문에 바로 return 처리 했다.

import java.util.*;
class Solution {
    public int solution(int[] order) {
        int answer = 0;
        
        Deque<Integer> stk = new ArrayDeque<>();
                    
        // index는 1부터 시작하는데        
        int index = 1;
        
        // order 반복문을 돌면서 
        for(int i = 0; i<order.length; i++){
            int curr = order[i];
            //System.out.println("==================");
            //System.out.println("지금 숫자는: "+curr);
            // index 또는 보조 컨테이너에서 꺼낼 수 있는 수와 하나라도 일치하면 answer++;
            // 스택에 있는 제일 위의 수와 같다면
            if(!stk.isEmpty() && stk.peek()==curr){
                //System.out.println("보조컨테이너에서 찾았어: "+stk.peek());
                stk.pop();
                answer++;
            }// 지금 싣게 될 박스 번호와 같다면
            else if(index==curr){
                //System.out.println("index랑 같아오 :"+index);
                answer++;
                index++;
            }// 두 곳 모두에서 찾을 수 없는데 컨테이너 벨트에 있는 박스 숫자가 더 작다면
            else if(index<curr){
                while(index<curr){
                    //System.out.println("보조컨테이너에 넣었어요: "+ index);
                    stk.push(index++);
                }
                if(index==curr) {
                    answer++;
                    index++;
                } 
            }else break; // 어느 곳에서도 찾을 수 없고 대상 박스 숫자보다 컨베이어벨트 숫자가 더 크다면 중단 
        }
              
        
        
        return answer;
    }
}
반응형