코딩 테스트
(Java) 프로그래머스 - 택배상자
로승리
2023. 5. 6. 02:23
문제 설명부터 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;
}
}