택배 상자 / stack

2025. 4. 24. 12:08·공부/Code Cata

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

문제를 요약하자면, 1~n까지 순서대로 메인 컨테이너 벨트에서 상자가 나오는데 이것을 order 순서에 맞게 트럭에 실어야한다.
보조 컨테이너 벨트가 존재하는데, 메인 컨테이너에서 나오는 상자와 order 순서가 맞지 않을 경우 보조 컨테이너에 순차적으로 넣어 보관이 가능하다. 이 보조 컨테이너는 stack처럼 후입선출 구조이다.

메인 컨테이너 벨트와 보조 컨테이너 벨트 모두 사용해서 order 순서에 맞게 몇 개의 상자를 실을 수 있는지 묻는 문제이다.

 

✅ 보조 컨테이너 stack을 사용한 풀이

#include <string>
#include <vector>
#include <stack>

using namespace std;

void check_temp(const vector<int>& order, stack<int>& temp_container, int& idx, int& box_cnt)
{
    while (!temp_container.empty() && order[idx] == temp_container.top())
    {
        temp_container.pop();
        idx++;
        box_cnt++;
    }
}

int solution(vector<int> order)
{
    stack<int> temp_container;
    int idx = 0;
    int box_cnt = 0;

    for (int i = 1; i <= order.size(); ++i)
    {
        // i가 order와 같다면
        if (i == order[idx])
        {
            idx++;
            box_cnt++;
            // 보조 컨테이너에서 order 처리
            check_temp(order, temp_container, idx, box_cnt);
        }
        // i가 order와 다르다면
        else
        {
            // 보조 컨테이너에 i 저장
            temp_container.push(i);
            // 보조 컨테이너에서 order 처리
            check_temp(order, temp_container, idx, box_cnt);
        }
    }

    return box_cnt;
}
order와 현재 메인 컨테이너 벨트에서 나오는 상자가 일치한다면, 바로 box_cnt를 증가시켜주고 order의 인덱스를 증가 시켜준다. 그리고 만약 order와 다른 상자가 나온다면 보조 컨테이너인 stack<int> temp_container에 저장시켜준다.

두 상황 모두 check_temp 매서드를 호출하는데, 루프를 돌며 order 순서와 보조컨테이너 순서가 같다면 box_cnt를 증가시켜주었다.

 

✅ 타인 풀이

#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(vector<int> order) 
{
    int answer = 0;
    stack<int> st;
    for (int i = 1; i <= order.size(); ++i)
    {
        st.push(i);

        while (!st.empty() && order[answer] == st.top())
        {
            st.pop();
            answer++;
        }
    }
    return answer;
}
똑같이 Stack을 사용해서 푼 사람인데, 애초에 컨테이너 벨트를 stack 하나로만 두고 1~order size를 넣을 때마다 while문으로 바로바로 체크해서 answer의 값을 증가시켜주었다.
그리고 어차피 answer의 값이 order의 순서이므로 따로 변수를 두지 않아서 훨씬 코드가 심플하고 불필요한 함수와 변수가 제거된 느낌이었다.

나의 코드에선 문제 지문의 흐름에 따라 코드를 작성하다보니 뭔가 불필요한 살이 붙어있는 느낌인데, 이 분의 코드를 보았을 때 문제의 요지를 정확하게 판단해서 불필요한 코드가 없다는 느낌이 들었다.

'공부 > Code Cata' 카테고리의 다른 글

큰 수 만들기 / Greedy  (1) 2025.04.25
쿼드압축 후 개수 세기 / 재귀  (0) 2025.04.24
소수 찾기 / 순열, DFS  (0) 2025.04.24
가장 큰 수 / 정렬  (0) 2025.04.23
다리를 지나는 트럭 / 큐  (0) 2025.04.23
'공부/Code Cata' 카테고리의 다른 글
  • 큰 수 만들기 / Greedy
  • 쿼드압축 후 개수 세기 / 재귀
  • 소수 찾기 / 순열, DFS
  • 가장 큰 수 / 정렬
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    택배 상자 / stack
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.