코딩 테스트

(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;
    }
}