- 기본 순서인 1,2,3 으로 내려오는 택배를 defaultOrder로 정의
- stack을 저장이 가능한 택배인 saveOrder로 정의
- 트럭에 실어야하는 택배의 배열을 wantOrder & wantOrder 인덱스를 wantOrderIdx로 정의
- wantOrder 와 saveOrder를 비교한다 (saveOrder 가 empty가 아닌지 확인 필요)
- 두개가 동일하면
- answer를 1 증가
- wantOrderIdx를 1 증가
- saveOrder를 pop
- 다시 1번으로 돌아간다.
- 동일하지 않으면 다음 순서로 넘어간다.
- defaultOrder를 확인하여 더 이상 처리해야할 택배가 없으면 해당 루프를 종료한다.
- defaultOrder 와 wantOrder를 비교한다.
- 두개가 동일하면
- answer를 1 증가
- defaultOrder를 1 증가
- wantOrderIdx를 1 증가
- 다시 1번으로 돌아간다.
- 동일하지 않으면 다음 순서로 넘어간다.
- defaultOrder를 saveOrder에 저장하고 defaultOrder를 1 증가 시킨다.
- 1번으로 돌아간다.
import java.util.Stack;
class Solution {
public int solution(int[] wantOrder) {
int answer = 0;
Stack<Integer> saveOrder = new Stack<Integer>();
int defaultOrder = 1;
int wantOrderIdx = 0;
while (true) {
if (!saveOrder.isEmpty() && wantOrder[wantOrderIdx] == saveOrder.peek()) {
answer++;
wantOrderIdx++;
saveOrder.pop();
continue;
}
if (defaultOrder > wantOrder.length)
break;
if (wantOrder[wantOrderIdx] == defaultOrder) {
answer++;
wantOrderIdx++;
defaultOrder++;
continue;
}
saveOrder.push(defaultOrder);
defaultOrder++;
}
return answer;
}
}