내려오는 택배상자를 보조 컨베이어 벨트를 이용하여 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;
}
}