백준 문제풀이

백준 1874 스택 수열(파이썬)

최훈오 2022. 8. 23. 19:09

 

import sys

n=int(input())
count=0
stack=[]
result=[]
result2=True

for i in range(n):
  x=int(input())

  while count<x:
    count+=1
    stack.append(count)
    result.append('+')

  if stack[-1]==x:
    stack.pop()
    result.append('-')
  else:
    result2=False
    continue

if result2==True:
  print('\n'.join(result))
else:
  print('NO')

의외로 별거 아닌거 같은데 어려웠다.

 

핵심은 stack의 맨 끝부분(가장 최근에 들어온 요소)가 x값과 다르면 수열을 생성할 수 없다.

또한  result2==True 부분에서 continue는 오류가 생겼을시에 다음 반복문을 다시 호출해서 상관없지만, break문을 사용하면 문제가 생긴 부분에서 바로 함수를 종료하므로 사용해서는 안된다. 

 

구조는

 

1 2 3 4 ++

1 2 3   -    (4)

1 2 -   (3)

1 2 5 6 ++

1 2 5 - (6)

1 2 5 7 8 ++

1 2 5 7 - (8)

1 2 5 - (7)

1 2 - (5)

1 - (2)

- (1)

 

1 2 5 3 4

이런식이고, No가 나오는 구조는

1 +

- (1)

2 +

- (2)

3 4 5 +++

3 4 _ (5)

여기서 x값은 3인데 stack[-1]이 4이므로 수열 생성이 안된다.