[백준 BOJ_1874] 스택 수열 Python 풀이

출처: 백준 온라인 저지

문제

image image

풀이

실제로 스택을 만들어주어 구현하였습니다.

  • stack에 아무 숫자도 없을 때는 넣어주고,
  • stack의 마지막 숫자가 curr_num이랑 같지 않을 때는
    • curr_num이 더 클 때는 숫자를 append
    • curr_num이 더 작을 때는 만들 수 없는 수열입니다.
  • stack의 마지막 숫자가 curr_num이랑 같을 때는 pop을 해주어 수열을 만들어줍니다.

코드

n = int(input())
stack = []
result = []
elem_num = 1
flag = 0
for _ in range(n):
  curr_num = int(input())
  if not stack:
    stack.append(elem_num)
    elem_num += 1
    result.append("+")
  # 스택의 마지막 요소가 curr_num이랑 같지 않을 때
  while stack and stack[-1] != curr_num:
    if curr_num > stack[-1]: # curr_num이 클 때는 숫자를 더 append
      stack.append(elem_num)
      elem_num += 1
      result.append("+")
    elif curr_num < stack[-1]: # curr_num이 더 작을 때는 만들 수 없는 수열
      flag = 1
      break
  if stack and stack[-1] == curr_num: # curr_num이랑 같을 때는 pop
    stack.pop()
    result.append("-")
if flag:
  print("NO")
else:
  print(*result, sep="\n")

Leave a comment