(Python) BOJ - 1874. 스택 수열

이수현·2021년 2월 19일
0

solved.ac - Class 2

목록 보기
1/4

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

스택 리스트를 따로 만든다...

  • 수열의 수를 하나하나 확인하며...
  • 먼저 수열의 숫자가 스택 top보다 크면, 스택 top과 수열의 수가 같아질 때 까지 스택에 수를 push한다.
    - if 스택 top이 수열에서 가리키는 수와 같다면, 그 수를 pop한다.
    - elif 스택 top이 수열에서 가리키는 수와 다르다면 그 수열 만들기는 불가능

0개의 댓글