프로그래머스 - 택배상자

홍성진·2023년 5월 3일
0

프로그래머스 - 택배상자

내려오는 택배상자를 보조 컨베이어 벨트를 이용하여 order array에 주어진 순서에 맞게 몇 개까지 실을 수 있는지 구하는 문제입니다. 보조 컨테이너 벨트는 앞 뒤로 이동이 가능하지만 입구 외에 다른 면이 막혀 있어서 맨 앞의 상자만 뺄 수 있습니다라는 설정이 다소 억지스럽지만 아무튼 stack을 사용해야겠다 생각했습니다. 상자가 내려오는 컨베이어 벨트를 원래벨트라고 하고 보조 컨베이어 벨트는 보조벨트라고 하겠습니다.


작업이 중단되는 때는 언제일까요?

바로 찾아야 하는 상자의 번호가 보조벨트의 맨 앞 상자의 번호보다 작을 때 입니다. 모든 원래벨트의 상자의 번호는 보조벨트의 맨 앞 상자의 번호보다 크기 때문입니다.

 
order array의 원소들은 서로 중복이 없다는 조건까지 있기 때문에 while문 내부에 작업 중단 조건만 달랑 break를 걸어놓고 편하게 구현할 수 있었습니다.

import java.util.*;

class Solution {
    public int solution(int[] order) {
        Stack<Integer> stack = new Stack<>();
        int answer = 0;
        int origin = 0;
        
        while (answer < order.length) {
            if (!stack.isEmpty() && order[answer] < stack.peek()) {
                break;
            }
            
            if (order[answer] > origin) {
                stack.add(origin++);
                continue;
            }
            
            if (order[answer] == origin) {
                origin++;
                answer++;
                continue;
            }
            
            if (!stack.isEmpty() && stack.peek() == order[answer]) {
                stack.pop();
                answer++;
                continue;
            }
        }
        
        return answer;
    }
}

0개의 댓글