https://www.acmicpc.net/problem/24511
# trial 1: 시간 초과 (list 사용)
import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
M = int(input())
C = list(map(int, input().split()))
result = []
for c in C:
prev = c
for i in range(N):
if not A[i]:
popped = B[i]
B[i] = prev
prev = popped
result.append(popped)
print(' '.join(result))
# trial 2: 시간 초과 (deque 사용)
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
A = input().split()
B = input().split()
M = int(input())
C = input().split()
queuestack = [deque([B[i]]) for i in range(N)]
result = []
for c in C:
popped = c
for i in range(N):
if not int(A[i]):
queuestack[i].append(popped)
popped = queuestack[i].popleft()
result.append(popped)
print(' '.join(result))
# trial 3: 시간 초과 (queue만 고려)
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
A = input().split()
B = input().split()
M = int(input())
C = input().split()
queuestack = [deque([B[i]]) for i in range(N) if not int(A[i])]
result = []
for c in C:
popped = c
for queue in queuestack:
queue.append(popped)
popped = queue.popleft()
result.append(popped)
print(' '.join(result))
# trial 4: 성공 (queue만 고려시, 여러 queue는 전체적으로 하나의 queue라는 이해)
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
A = input().split()
B = input().split()
M = int(input())
C = input().split()
queuestack = deque([B[i] for i in range(N) if not int(A[i])])
result = []
for c in C:
queuestack.appendleft(c)
result.append(queuestack.pop())
print(' '.join(result))
[개선할 점]
- queue와 stack을 너무 특정 방향 기준(왼쪽이 old다)으로만 생각하고 있었음. FIFO, LIFO에 대한 이해 자체가 중요함.
'codes > baekjoon' 카테고리의 다른 글
10773 제로 (0) | 2025.01.04 |
---|---|
28278 스택 2 (0) | 2025.01.03 |
11478 서로 다른 부분 문자열의 개수 (0) | 2024.12.15 |