[백준] 24511: queuestack - 파이썬[python]

다인·2024년 10월 16일

백준

목록 보기
80/112
post-thumbnail

문제 이해

  • 문제를 이해하는 데 시간이 좀 걸렸다ㅎ 그치만 손으로 적자마자 바로 이해완.
  • queuestack은 큐와 스택이 섞여있지만 각 자료구조에는 한 개의 원소만 들어있다.
  • 그래서 원소를 하나 집어넣을 때 큐냐 스택이냐에 따라 새로 들어온 원소가 pop될지 기존의 원소가 pop될지가 결정되는 것이다.
  • 결국 스택은 새로운 원소가 pop되니까 기존의 원소가 계속 남아있으므로 변하지 않는다. 즉, 우리는 스택은 고려하지 않고 큐만 보면 된다. 반대로 큐는 기존의 원소가 pop돼서 변하니까 말이다.(이해가 안된다면 예제를 하나하나 넣어보며 끄적여보자)

코드 구상

  • 문제에서 요구하는 바는 리턴값을 출력하는 것이다. 즉, 원소를 하나씩 집어넣을 때 가장 마지막에 pop되는 요소를 출력하면 된다.

예제 1 분석

  • 예제1에서 큐부분만 보자. 스택은 2, 3으로 변하지 않으니 고려하지 않아도 된다.
    • 1, 4 -> 2, 1 => 4 출력 (가장 끝인 4를 밀어내고 2가 들어옴)
    • 2, 1 -> 4, 2 => 1 출력 (1을 밀어내고 4 들어옴)
    • 4, 2 -> 7, 4 => 2 출력 (2를 밀어내고 7 들어옴)
  • 아하. 그러면 우리는 큐에 저장된 요소들만 묶어서 새로운 큐를 만들고, 새로운 원소가 들어오면 appendleft로 저장하고 가장 오른쪽의 원소만 pop하면 된다는 것을 알 수 있다.

코드

import sys
from collections import deque
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()))

queue = deque()
for i in range(N):
    if not A[i]:
        queue.append(B[i])

for c in C:
    queue.appendleft(c)
    print(queue.pop(), end=' ')

0개의 댓글