https://www.acmicpc.net/problem/24511


문제 이해를 하는 데 한참 걸렸다.
예제 입력 1을 이해해보자.
총 다섯번 고정으로 인풋을 받는다.
1. 
queuestack이라는 자료구조의 개수. N
여기서 queuestack은 어떠한 자료구조인데 0의 경우 queue, 1의 경우 stack이 된다는 머리아픈 자료구조를 임의로 누가 만들었다.
고로 0 1 1 0 을 입력받으면 [ 큐 스택 스택 큐 ] 이런식으로 생성된다고 한다.

2번에서 이 queuestack의 자료구조가 큐인지 스택인지 0과 1을 이용하여 정의해준다.

3에서 이 queuestack이라는 자료구조의 초기 원소 값을 결정해준다.
예제에선 1,2,3,4 로 초기화 해주었다.

4에서 이 queuestack에 삽입할 원소의 개수를 정의해준다.

5에서 이 queuestack의 삽입할 원소의 값을 정의해준다.
어떻게 예제가 돌아갔는 지 보면
[큐 스택 스택 큐] 로 queuestack 자료구조가 정의되었고 값은
[1, 2, 3, 4] 란다.
그리고 어떠한 값을 이 queuestack의 append하고 pop할 거란다.
이 경우 '큐'의 경우. LIFO(Last In First Out) 구조, 즉 먼저 들어간다고 먼저 나오지 않고 기존의 값이 pop된다.
그러니 append 하고 pop 을 해주면 기존의 값이 나오는 반면
'스택'의 경우 append 하고 pop 해주면 바로 append 한 값이 나오므로 그대로다.
이 점을 숙지하고 다시 돌아가서,
[큐 1, 스택 2, 스택 3, 큐 4] 의 구조로 형성되어있는 자료구조에 2 4 7을 차례로 append pop 해줄 거란다.
먼저 2를 append pop 을 반복하는 경우를 생각해보자.
2를 우선 제일 앞 1의 원소를 가진 큐에 append, pop 을 해주면 2가 append되고 1이 튀어나온다. 이 1을 다음 스택 2의 append pop 해줄것이다.
그런데 아까 그대로 나오는 것을 우리는 알고 있다. 그래서 1이 그대로 나올 것이고,
스택 3에도 마찬가지로 1이 나올것이다.
마지막 큐4에 1이 들어가면 1이 append 되고 4가 pop되어 나올것이다.
그래서 결국 이 queuestack의 원소의 값은 [2,2,3,1] 이 될 것이다.
이런 식으로 [큐 2, 스택 2, 스택 3,큐 1] 에 다시 4와 7을 동일한 방식으로 append&pop 해주었을때 마지막으로 튀어나오는 원소의 값을 받아 print 해주면 된다.
핵심은 스택은 처리해줄 필요가 없고 큐만 보면 된다는 것이다.
고로 [1,2,3,4] 의 값을 가졌지만 [1,4] 인 queue로 봐도 무방하다.
이 큐 [1,4] 에 2,4,7의 값을 appendleft해주고 pop해주면 된다.
즉 [1,4]에 큐에 2,4,7을 차례로 appendleft 해주고
[2,1,4]
[4,2,1,4]
[7,4,2,1,4] 에 pop pop pop 해주어 4,1,2가 나오는 것이다.
from collections import deque
import sys
input = sys.stdin.readline
N = int(input()) # queuestack을 구성하는 N개의 자료구조
A = list(map(int, input().split())) # 길이 N의 수열 A
B = list(map(int, input().split())) # 길이 N의 수열 B
M = int(input()) # 삽입할 수열의 길이 M
C = list(map(int, input().split())) # 길이 M의 수열 C
queue = deque([])
for i in range(N):
if A[i] == 0: # 큐인 자료구조만 모으기
queue.append(B[i])
# 배열 C의 원소를 1개 appendleft 할 때마다 pop 연산 수행
for i in range(M):
queue.appendleft(C[i])
print(queue.pop(), end= ' ')