본문 바로가기
자료구조 & 알고리즘/문제 풀이 (프로그래머스)

택배상자 (큐, 스택)

by 정구정구 2026. 6. 29.

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131704

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제 풀이

 문제가 굉장히 길지만 정리해보면,

  • 번호 순으로 작성된 컨테이너 (que)
  • 임시로 값을 저장할 수 있는 컨테이너 (stack)

이렇게 3개로 order 컨테이너의 순서를 몇 개까지 맞출 수 있는지 물어보는 문제이다.

큐와 스택에 대한 이해도를 묻는 문제인거 같고, 난이도는 쉬운 편이었다.

 

 

작성한 코드 (정답)

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class Solution {
    public int solution(int[] order) {
    
        int answer = 0;

        Queue<Integer> que = new LinkedList<>();
        Stack<Integer> stack = new Stack<>();

        for (int i = 1; i <= order.length; i++) {
            que.add(i);
        }

        for(int i = 0; i < order.length; i++) {

            if (!stack.isEmpty() && order[i] == stack.peek()) {
                stack.pop();
                answer++;
            }

            else if (que.isEmpty()) {
                return answer;
            }

            else {
                for (;;) {
                    if (que.isEmpty()) {
                        break;
                    }

                    if (order[i] == que.peek()) {
                        que.remove();
                        answer++;
                        break;
                    }

                    stack.push(que.peek());
                    que.remove();
                }
            }
        }

        return answer;
    }
}

 

 

더 좋은 코드

1. Stack<Integer> 대체

Stack<Integer> stack = new Stack<>();

 

위의 문법은 

 

Deque<Integer> stack = new ArrayDeque<>();

 

위와 같이 쓰는 것을 장려한다고 한다. (위 문법이 Stack의 문법을 포함하기에, Stack 문법에 대한 케어가 중단되었다고 한다.)

 

 

2. 순회 1회 줄이기

for (int i = 1; i <= order.length; i++) {
            que.add(i);
        }

 

 다른 사람들의 코드를 보면 int[]를 que로 변경하지 않고 처리한 경우가 많았다. 일단 문제가 요구한 시간 안에 모두 처리가 되어서 코드를 수정하진 않았지만, 시간 초과가 났다면 위 순회를 줄여서 시간을 줄여보려고 했을 것 같다.