(Python) BOJ - 1874. スタック数列


BOJ - 1874. スタック数列
import sys
from typing import List


# Accepted, Runtime: 232ms
def solve(n: int, nums: List[int]) -> List[str]:
    ret = []    # 연산 리스트
    stack = []  # 스택
    cur = 1     # push 하는 수
    for num in nums:
        # 스택 top 이 num 과 같아질 때 까지 스택에 push
        while cur <= num:
            stack.append(cur)
            ret.append('+')
            cur += 1
        # 스택 top이 num 과 같다면 pop
        if stack[-1] == num:
            stack.pop()
            ret.append('-')
        # 스택 top이 num 과 다르면 불가능
        else:
            return []
    return ret


n = int(sys.stdin.readline())
nums = [int(sys.stdin.readline()) for _ in range(n)]
ans = solve(n, nums)
print('NO' if not ans else '\n'.join(ans))
スタックリストを別途作成...
  • 列の数を1つずつチェック...
  • 数列の数がスタックtopより大きい場合、スタックtopと数列の数が等しいまでスタックに数を押します.
    -スタックtopが数列で指定された数と同じ場合、その数がポップアップされます.
    -elifスタックtopが数列で指定する数と異なる場合、その数列
  • は作成できません.