코딩테스트

[백준] 24511 | queuestack [파이썬/python]

사용할수없는닉네임이왜이렇게많지ㅠㅠ 2025. 3. 15. 21:20
728x90

문제

link: https://www.acmicpc.net/problem/24511

 

문제 내에 제시된 'queuestack'이라는 특정한 자료구조를 이용해서 제시된 원소를 넣었을 때의 리턴값을 출력하면 된다.

 

접근

queuestack은 원소가 한 개인 큐 또는 스택의 나열이라고 보면 이해하기 쉽다.

원소를 삽입할 때는 queuestack의 1번에 삽입할 원소를 push한 후 1번의 자료구조대로 pop하고 그 리턴값을 다음 번호에 넣는 동작을 반복한다.

나의 경우 문제가 단번에 이해되지 않아서 그림을 그려 보았다. 문제 페이지에 적힌 queuestack 작동 구조를 단계별로 따라해보거나 문제 페이지의 예제 아래에 적힌 큐스택 내부 표현을 참고하면 문제를 이해하기 쉽다.

(설명용으로 그린 그림이 아니라서 도움이 될지는 모르겠지만 첨부해보았다.)

자료구조가 큐일 때는 먼저 들어와 있던 원소가 pop되고 스택일 때는 나중에 들어온 원소가 pop되기 때문에, 큐인 것들만 모아 먼저 리턴되는 순으로 정렬하고 삽입할 원소 수열 리스트(C)와 합쳐 리턴값 개수만큼 슬라이싱 후 출력하도록 코드를 작성했다.

 

코드

import sys

N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
B = list(map(int, sys.stdin.readline().split()))
M = int(sys.stdin.readline())
C = list(map(int, sys.stdin.readline().split()))

#원소를 삽입했을 때 출력될 값 리스트 q 생성
q = [B[i] for i in range(N-1, -1, -1) if A[i] == 0] + C

#리턴값 개수만큼만 출력
print(' '.join(map(str, q[:M])))

 

728x90