https://school.programmers.co.kr/learn/courses/30/lessons/131704
문제의 설명에 따라, 메인 벨트는 Queue를, 서브 벨트는 Stack을, 서브로 옮겨졌는지 여부를 저장할 boolean[]을 사용했다.
원하는 박스가 서브 벨트로 옮겨졌는지 cache로 체크해보고, 서브 벨트에 없다면 메인 벨트에 있는 박스들을 서브벨트로 옮겨주는 방식..
import java.util.*;
class Solution {
public int solution(int[] order) {
Queue<Integer> main = new LinkedList();
for (int i = 0; i < order.length; i++) {
main.add(i + 1);
}
Stack<Integer> sub = new Stack();
boolean[] cache = new boolean[order.length + 1];
int answer = 0;
int idx = 0;
while (!main.isEmpty() || !sub.isEmpty()) {
int need = order[idx];
if (cache[need]) {
int box = sub.pop();
// 서브에 넣었던 박스인데, 서브 벨트의 마지막 박스가 아님. 멈춤
if (box != need) break;
answer++;
idx++;
} else {
// 더이상 꺼낼 박스가 없음
if (main.isEmpty()) break;
int box = main.poll();
if (box == need) {
answer++;
idx++;
} else {
// 서브로 옮김
sub.push(box);
cache[box] = true;
}
}
}
return answer;
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
쿼드압축 후 개수 세기 (0) | 2023.11.06 |
---|---|
2개 이하로 다른 비트 (0) | 2023.11.06 |
2 x n 타일링 (0) | 2023.11.06 |
숫자 변환하기 (0) | 2023.11.03 |
프렌즈4블록 (0) | 2023.11.03 |