[백준 1874] 스택 수열 / 파이썬

권한·2025년 12월 29일

BOJ

목록 보기
28/40

pop이랑 push를 써서 수열을 만들어라는 알겠는데 모르겠어서 차근차근 정리해보았다.

1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.

  1. 스택에 수를 push할 경우 반드시 오름차순으로만 push할 수 있다.
    • 4를 push해야할 경우 1, 2, 3, 4 순으로 1, 2, 3을 push하고 나서 4를 push할 수 있다.
    • pop을 한 수들을 나열했을 때 입력했던 수의 순서로 나열(=수열)이 되어야한다.
  2. 같은 정수가 두번 나올 수 없다.
from collections import deque
import sys
input = sys.stdin.readline

stack = deque()
log = []

n = 1
flag = 0

S = [ int(input()) for _ in range(int(input())) ]

for x in S:
    while n <= x:
        stack.append(n)
        log.append('+')
        n += 1

    if stack[-1] == x:
        stack.pop()
        log.append('-')
    else:
        print("NO")
        flag = 1
        break

if not flag:
    for x in log:
        print(x)
profile
티스토리로 옮김

0개의 댓글