문제 설명부터 Stack을 쓰라고 말하는 것 같았다.
메인 컨베이어 벨트는 Queue로 서브 컨베이어 벨트는 Stack을 이용해서 풀이했다.
90% 풀이 금방 끝냈지만, while문의 종료 조건을 생각하느라 시간이 걸렸다.
flag 변수를 이용해서 어떠한 작업도 하지 않는다면 while문을 종료시켜 풀이에 성공했다.
최종 코드
import java.util.*;
class Solution {
public int solution(int[] order) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new LinkedList<>();
for(int i = 1; i <= order.length; i++) {
queue.add(i);
}
int i = 0;
while(true) {
boolean flag = false;
if(!queue.isEmpty() && order[i] == queue.peek()) {
queue.poll();
answer++;
i++;
flag = true;
continue;
}
if(!stack.isEmpty() && order[i] == stack.peek()) {
stack.pop();
answer++;
i++;
flag = true;
continue;
}
if(!queue.isEmpty()) {
stack.add(queue.poll());
flag = true;
}
if(!flag) {
break;
}
}
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 연속된 부분 수열의 합 (0) | 2023.05.07 |
---|---|
(Java) 프로그래머스 - 이모티콘 할인행사 (0) | 2023.05.06 |
(Java) 프로그래머스 - 롤케이크 자르기 (0) | 2023.05.05 |
(Java) 프로그래머스 - 숫자 변환하기 (0) | 2023.05.05 |
(Java) 프로그래머스 - 뒤에 있는 큰 수 찾기 (0) | 2023.05.04 |