[c++/프로그래머스] 택배상자

조히·2023년 8월 5일
0

PS

목록 보기
78/82

문제 링크

택배상자

풀이

stackqueue 문제

  1. 메인 컨테이너는 queue이고, 서브 컨테이너는 stack이다. 먼저 queuemain에 초기화를 해준다.
  2. 주문을 보면서 main의 맨 앞 상자가 주문 상자보다 작거나 같다면 주문한 상자가 메인 컨테이너에 있다는 것이므로 찾을 때까지 pop한다. 이 때 메인 컨테이너가 비어있지 않아야 에러가 안뜬다.
    2-1. 상자가 같다면 answer++해주고 break
  3. 2번 조건이 아니라면 상자는 서브에 있다는 것. 서브 컨테이너에서는 더이상 옮길 곳이 없으므로 sub.top()이 주문한 상자가 아니라면 바로 break
    3-1. 마찬가지로 같다면 answer++해주고 서브 컨테이너에서 pop해준다.

코드

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

using namespace std;

int solution(vector<int> order) {
    int answer = 0;
    
    queue<int> main;
    stack<int> sub;
    
    for(int i=1;i<=order.size();i++) // 메인 컨테이너 초기화
    {
        main.push(i);
    }
    
    for(int i=0;i<order.size();i++)
    {
        if(!main.empty() && main.front() <= order[i]) // 상자가 메인 컨테이너에 있다면
        {
            while(1)
            {
                int front = main.front();
            
                main.pop();
                if(front == order[i])
                {
                    answer++;
                    break;
                }
                sub.push(front);
            }
        }
        else // 상자가 서브 컨테이너에 있다면
        {
            if(sub.top() == order[i])
            {
                answer++;
                sub.pop();
            }
            else
            {
                break;
            }
        }
    }
    
    
    return answer;
}
profile
Juhee Kim | Game Client Developer

0개의 댓글