from collections import deque
import sys
input = sys.stdin.readline
N = int(input().rstrip())
sequence_A = list(map(int, input().rstrip().split()))
sequence_B = list(map(int, input().rstrip().split()))
M = int(input().rstrip())
sequence_C = list(map(int, input().rstrip().split()))
queue = deque()
for i in range(N):
if sequence_A[i] == 0:
queue.appendleft(sequence_B[i])
for i in range(M):
queue.append(sequence_C[i])
print(queue.popleft(), end = " ")
먼저, 문제를 이해하지 못했다면 참고 링크
해당 링크에 문제 이해를 돕기 위한 그림이 있다. 이를 보고 이해하거나 따라 그려보고 이해하길 바란다.
문제를 이해하고 보니 자료구조 중 큐를 거치면 값이 변하는 반면, 스택을 지나치면 값이 그대로임을 알 수있다.
즉, 스택을 고려하지 않아도 된다는 점이다.
또한, 큐를 동작 구조를 자세히 보면 알 수 있는 점이 있다.
예를 들어서 예제1번 과 같은 구조라고 했을 때, 스택은 고려하지 않으니 1번째 큐 , 4 번째 큐가 있다고 하자
처음엔 1번째 큐에 1, 4번째 큐에 4가 삽입 된 상태이다
2를 삽입 하면 1번째 큐에 2가 들어가고 1이 4번째 큐로 원래 있던 4를 출력한다
이 점을 보면 여러개의 큐는 하나의 큐로 생각 할 수 있다는 점이다.
정리하면
1. 스택은 고려하지 말 것.
2. 여러 개의 큐가 있다고 여러 개로 나누어 계산하지말고 하나의 큐로 생각할 것.
from collections import deque
import sys
input = sys.stdin.readline
N = int(input().rstrip())
sequence_A = list(map(int, input().rstrip().split()))
sequence_B = list(map(int, input().rstrip().split()))
M = int(input().rstrip())
sequence_C = list(map(int, input().rstrip().split()))
queue = deque()
for i in range(N):
if sequence_A[i] == 0:
queue.appendleft(sequence_B[i])
queue 를 deque() 로 생성해준다.
처음 초기 상태 일때를 고려하여 초기화를 진행한다.
N 다음으로 입력 받는 것은 0 이나 1의 리스트이다. 0은 큐를 의미하고 1은 스택을 의미한다. 이 점을 이용하여 0 이라면 queue 에 삽입하고, 1이라면 스택이므로 고려하지 않기에 생략한다.
for i in range(M):
queue.append(sequence_C[i])
print(queue.popleft(), end = " ")
M 만큼 삽입하기에 for 문을 돌리고 삽입 되는 숫자를 미리 입력 시킨 sequence_C의 i번쨰 항목을 큐의 왼쪽부터 집어넣고 출력한다.