https://www.acmicpc.net/problem/24393
자료 구조, 큐, 시뮬레이션
풀이
기재된 섞는 순서에 맞춰 left_side queue, right_side queue 에 분배해 놓는다.
입력은 총 카드 수인 27 합을 맞출 때까지 받는다.
오른쪽 한번 왼쪽 한번 반복하여 left_side, right_side에서 카드를 메인 queue로 보내 합친다.
위 로직을 반복한다.
#include <bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL), cout.tie(NULL)
int N;
queue<int> ls, rs, ret;
int main(void){
fast;
cin>>N;
ret.push(-1);
for(int i=0;i<26;++i) ret.push(1);
while(N--){
int cnt=0;
for(int i=0;i<13;++i) {
ls.push(ret.front()); ret.pop();
}
for(int i=0;i<14;++i){
rs.push(ret.front()); ret.pop();
}
bool flag=true;
while(cnt<27){
int card; cin>>card;
cnt+=card;
for(int i=0;i<card;++i){
if(flag){
ret.push(rs.front()); rs.pop();
} else{
ret.push(ls.front()); ls.pop();
}
}
flag=!flag;
}
}
for(int i=1;i<=27;++i){
int cur=ret.front(); ret.pop();
if(cur==-1){
cout<<i; return 0;
}
}
}