stack
과 queue
문제
queue
이고, 서브 컨테이너는 stack
이다. 먼저 queue
인 main
에 초기화를 해준다.main
의 맨 앞 상자가 주문 상자보다 작거나 같다면 주문한 상자가 메인 컨테이너에 있다는 것이므로 찾을 때까지 pop
한다. 이 때 메인 컨테이너가 비어있지 않아야 에러가 안뜬다.answer++
해주고 breaksub.top()
이 주문한 상자가 아니라면 바로 breakanswer++
해주고 서브 컨테이너에서 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;
}