🧫 문제 분석
✔️ 출처
📖 문제

메인 컨테이너 벨트는 1부터 n까지 순서대로 한쪽 방향으로 내려옴
보조 컨테이너 벨트는 stack구조, LIFO
주어진 입출력(order)의 요소들을 순서이면서 택배상자 번호라고 가정하고 풀이한다.
1. order[i]의 택배상자 번호 전까지 메인 벨트의 상자를 보조 컨테이너 벨트에 넣는다.
2. order[i]의 택배상자 번호와 현재 메인 벨트 상자의 번호가 같은지 확인한다.
3. order[i]의 택배상자 번호와 보조 벨트의 입구쪽 상자의 번호가 같은지 확인한다.
4. 2,3 번 둘다 아니라면 더이상 실을 수 없으므로 종료한다.
5. 이를 order의 모든 상자수만큼 반복한다.
🔅 문제 풀이
import java.util.Stack;
class Solution {
// 상자는 1부터 n까지 순서대로 내려옴
// 기사가 알려준 순서로 택배상자를 실어야함
// 보조 컨테이너 벨트 : stack 구조
// 보조써도 기사가 알려준 순서대로 못싣는다면 더이상 X
public int solution(int[] order) {
Stack<Integer> subBelt = new Stack<>();
int boxNum = 1, idx = 0;
int answer = 0;
while (idx < order.length) {
// 알려준 순서에 맞는 택배상자 번호 전까지 보조 벨트에 옮기기
while (boxNum < order[idx]) {
subBelt.push(boxNum++);
}
// 순서와 메인 컨테이너벨트의 상자 번호가 같다면
if (order[idx] == boxNum) {
answer++;
boxNum++;
idx++;
// 보조벨트에 있다면
} else if (!subBelt.isEmpty() && order[idx] == subBelt.peek()) {
subBelt.pop();
answer++;
idx++;
// 둘다 없다면 그만 싣는다.
} else {
break;
}
}
return answer;
}
}

❗ 오답노트 / 필요한 지식
- 괜찮은 문제인것 같다.
'programmers > Lv 2' 카테고리의 다른 글
쿼드압축 후 개수 세기 [자바] (0) | 2025.01.23 |
---|---|
숫자 변환하기 [자바] (0) | 2025.01.21 |
뒤에 있는 큰 수 찾기 [자바] (0) | 2025.01.16 |
혼자서 하는 틱택토 [자바] (0) | 2025.01.14 |
연속된 부분 수열의 합 [자바] (0) | 2025.01.04 |