https://school.programmers.co.kr/learn/courses/30/lessons/131704
구현 아이디어 3분 구현 47분
무난하게 접근했다가 시간 싸움에 처참히 패배한 문제. 잡아야 할 조건이 많았다.
#include <string>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int solution(vector<int> order) {
int answer = 0;
int N = order.size();
queue<int> main;
stack<int> sub;
for(int i = 0; i < N; ++i) main.push(i + 1);
int i = 0;
bool find_sub = false;
for(; i < N; ++i)
{
int cur_box = 0;
find_sub = false;
while(!sub.empty() && i < N)
{
cur_box = order[i];
int pick_box = sub.top();
if(pick_box == cur_box)
{
++i;
sub.pop();
find_sub = true;
}
else
{
find_sub = false;
break;
};
}
if(!find_sub && main.empty()) break;
if(!main.empty() && i < N)
{
cur_box = order[i];
int pick_box = main.front();
if(pick_box == cur_box) main.pop();
else
{
main.pop();
sub.push(pick_box);
--i;
}
}
}
for(int i = N - sub.size(); i < N; ++i)
{
if(sub.top() == order[i]) sub.pop();
else break;
}
return answer = N - (sub.size());
}