백준 문제풀이
백준 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이므로 수열 생성이 안된다.