2025. 10. 1. 23:09 Baekjoon(Python)/단계별로 풀어보기(Python)

Baekjoon(Python)/단계별로 풀어보기(Python)

[백준][16단계 스택, 큐, 덱 1] 24511번 /queuestack (파이썬/Python)

junslee 2025. 10. 1. 23:09

1. 문제 설명

 

 

2. 코드

import sys
from collections import deque
input = sys.stdin.readline

N = int(input().strip())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
M = int(input().strip())
C = list(map(int,input().split()))

D = deque(b for a,b in zip(A,B) if a == 0)

out = []
for x in C:
    D.appendleft(x)
    out.append(str(D.pop()))
print(" ".join(out))

3. 풀이 과정

스택이랑 큐일때를 구분해서 적용시키면 되는 문제이다.

스택일 때는 후입선출로 무시하고 넘어가면 된다.

큐일 때는 교체하면 된다. 

코드로 구현할 때, 큐에 대한 문제는 덱으로 구현시키면 좀 더 편하게 구현할 수 있다.

deque 패키지를 받고, D에 a가 0, 큐일 때만 B에서 값을 가져와 덱을 구성한다.

출력시킬 빈 리스트 out을 만들고,

C의 값들을 하나씩 적용시킨다.

큐일때만 교체가 되기 때문에

D에 값 x를 appendleft()으로 맨 앞에다 넣고

pop()으로 맨 뒷 값을 제거한다.

out.append(str())로 바로 넣어서, 제거한 값을 문자열 변환 후, out에 추가하는 것까지 한다.

for문을 빠져나오면 join()으로 공백을 추가하여 출력한다.

(문자열 변환을 하는 이유는 join()함수를 쓰기 위함이다.)

4. 자투리 개념

1. 스택 (Stack)

  • 정의 : 데이터를 한쪽 끝(top)에서만 넣고(push) 꺼내(pop)는 구조
  • 특징 : 후입선출(LIFO)
  • 비유 : 접시 더미
  • 대표 연산
    - push(x), pop(), peek()

2. 큐 (Queue)

  • 정의 : 데이터를 한쪽 끝(rear)에서 넣고, 반대쪽 끝(front)에서 꺼내는 구조
  • 특징 : 선입선출(FIFO)
  • 비유 : 줄 서기
  • 대표 연산
    - enqueue(x), dequeue(), front()

3. 덱 (Deque, Double-Ended Queue)

  • 정의 : 양쪽 끝(front, rear)에서 모두 삽입과 삭제가 가능한 구조
  • 특징 : 스텍과 큐의 성격을 모두 가짐
  • 비유 : 양쪽에서 들어오고 나갈 수 있는 출입구가 있는 줄
  • 대표 연산
    - append(x), appendleft(x), pop(), popleft()

4. * 언패킹(unpacking) 연산자

  • 리스트나 튜플을 낱개 인자처럼 풀어주는 역할 

 

반응형