본문 바로가기
백준

[백준] 24511번 : queuestack - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 12. 7.
728x90
반응형

 

 

24511번: queuestack

첫째 줄에 queuestack을 구성하는 자료구조의 개수 $N$이 주어진다. ($1 \leq N \leq 100\,000$) 둘째 줄에 길이 $N$의 수열 $A$가 주어진다. $i$번 자료구조가 큐라면 $A_i = 0$, 스택이라면 $A_i = 1$이다. 셋째 줄

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 queue와 stack인 자료구조로 이루어진 수열에서 원소를 추가로 삽입했을 때 나오는 원소를 반환하는 문제이다. 원소를 삽입하고 삭제하는 과정에서 stack 자료구조는 삽입하는 원소와 삭제하는 원소가 동일하므로 고려할 필요가 없다. 따라서 queue 자료구조인 원소만 고려해 주면 된다.

queue 자료구조인 원소들만 따로 모아 새로운 queue 자료구조를 만들고 원소를 삽입하면서 삭제되는 원소를 출력한다.

queue 자료구조는 삽입하면 원래 있던 원소가 삭제되어 다음 원소에 삽입된다.

이 과정을 반복하면 결국 추가로 삽입되는 원소제일 앞에 위치하고, 제일 뒤에 있는 원소가 삭제된다.

ex) [1, 4]에 2 삽입 → [2, 4], 1 → [2, 1], 4 → 4 출력

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 자료구조가 queue인 원소들만 따로 deque 자료구조로 저장하기 위해 deque 함수를 불러온다. from collections import deque
  3. 자료구조의 개수를 입력받는다. N = int(sys.stdin.readline())
  4. 수열 A의 원소를 입력받아 리스트로 저장한다. A = list(map(int, sys.stdin.readline().split()))
  5. 수열 B의 원소를 입력받아 리스트로 저장한다. B = list(map(int, sys.stdin.readline().split()))
  6. 삽입할 수열의 길이를 입력받는다. M = int(sys.stdin.readline())
  7. 삽입할 원소를 입력받아 리스트로 저장한다. C = list(map(int, sys.stdin.readline().split()))
  8. 자료구조가 queue인 원소를 저장할 deque 자료구조를 생성한다. D = deque()
  9. 자료구조의 개수만큼 반복하며 for i in range(N)
  10. 만약 해당 자료구조가 queue이면 해당  원소 값을 추가한다. if (A[i] == 0): D.append(B[i])
  11. 삽입할 원소의 개수만큼 반복하며 for i in range(M)
  12. 삽입할 원소를 제일 앞에 삽입하고 D.appendleft(C[i])
  13. 제일 뒤의 원소를 제거하여 줄 바꿈 없이 출력한다. print(D.pop(), end=' ')
반응형

3. 소스코드

import sys
from collections import deque

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()))

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

for i in range(M):
    D.appendleft(C[i])
    print(D.pop(), end=' ')
728x90
반응형