from collections import deque
qsnum = int(input())
qsstate= list(map(int,input().split()))
valstatet = list(map(int,input().split()))
valnum = int(input())
valarr = list(map(int,input().split()))
qsarr = [deque() for _ in range(qsnum)]
ans = []
for i in range(qsnum): # 큐 & 스택에 초기값 할당
qsarr[i].append(valstatet[i])
for i in range(valnum): # 삽입할 원소가 담긴 배열
for j in range(qsnum): # 큐 & 스택의 리스트를 돎
if j == 0: qsarr[0].append(valarr[i]) # 첫번째 자료구조
if j >= 1: # 두번째부터의 자료구조
if qsstate[j-1] == 0: # 직전이 큐인 경우
qsarr[j].append(qsarr[j-1].popleft())
elif qsstate[j-1] == 1: # 직전이 스택인 경우
qsarr[j].append(qsarr[j-1].pop())
# 마지막 자료구조 형태보고 값 꺼내서 저장
if qsstate[-1] == 0:
ans.append(str(qsarr[-1].popleft()))
else:
ans.append(str(qsarr[-1].pop()))
for sq in qsarr: print(sq)
print(" ".join(ans))
스택은 직전의 자료구조로부터 받은 값을 그대로 넘겨주기 때문에 사용하지 않아도 된다. 큐는 여러 개 있을 경우 역순으로 합치면 하나의 큐로 사용이 가능하다. 예를 들어 3개의 큐 [3], [4], [5] 가 있을 경우 [5, 4, 3] 으로 합칠 수 있다.
신박하다..
from collections import deque
n = int(input())
qslist = list(map(int, input().split()))
vallist = list(map(int,input().split()))
m = int(input())
inputList = list(map(int,input().split()))
queue = deque()
for i in range(len(qslist)-1,-1,-1): # 역순으로 큐들의 값을 하나의 큐로 옮김
if qslist[i] == 0:
queue.append(vallist[i])
for i in range(m): # 하나의 큐에 값들을 삽입함
queue.append(inputList[i])
for i in range(m): # 하나의 큐에서 값들을 출력
print(queue[i], end=" ")