JAVA/Coding Test

[JAVA] 프로그래머스 택배상자_stack

오늘도개발 2024. 7. 16. 20:43

 

문제 : 

https://school.programmers.co.kr/learn/courses/30/lessons/131704

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

접근 : 

 

  - 메인 컨베이어의 1부터 n 까지 상자를 대상으로 실행한다.

 

  - order를 확인하여서 order에 해당하는 위치의 상자에 도달하면 트럭에 상자를 넣고 보조 컨베이어의 마지막 상자를 확인하여 order의 다음 순번에 해당하는 상자를 트럭에 넣는다. (다음 순번의 order와 달라지거나 보조 컨베이어가 빌 때까지 반복)

 

  - 만약 order와 다른 상자 일 경우, 보조 컨베이어에 넣는다.

 

 

 

 

 

코드 구현 :

 

import java.util.Stack;
class Solution {
    public int solution(int[] order) {
        int answer = 0;
        Stack<Integer> s = new Stack<>();
        int flag = 0;

        for(int i = 1 ; i <= order.length ; i++){
            if(order[flag] != i){
                s.push(i);
                continue;
            }
            //만약 매인 컨베이어가 트럭에 실어야 하는 순번이 오면 트럭에 넣고 다음 실어야 할 택배의 번호를 확인한다.
            flag++;
            answer++;

            //만약 서브 컨베이어에 다음 실어야할 택배 박스가 있다면 트럭에 넣는다.
            while(s.size() > 0 && s.peek() == order[flag]){
                s.pop();
                flag++;
                answer++;
            }
        }
        return answer;
    }
}