sm 기술 블로그
155. 1874(스택 수열) - 파이썬 본문
import sys
input = sys.stdin.readline
N = int(input())
cnt = 0
stack = []
result = []
for i in range(N):
T = int(input())
while cnt < T:
cnt += 1
stack.append(cnt)
result.append("+")
if stack[-1] == T:
result.append("-")
stack.pop()
else:
print("NO")
stack.append(1)
break
if not stack:
print("\n".join(result))
문제요약
스택을 이용하여 입력 값이 되도록 해라
설명
while cnt < T:
cnt += 1
stack.append(cnt)
result.append("+")
입력값이 cnt 보다 작다면 1을 증가시켜 스택에 저장하고 +를 출력하기 위해 result 에 저장한다.
if stack[-1] == T:
result.append("-")
stack.pop()
else:
print("NO")
stack.append(1)
break
만약 맨 뒤 값이 (스택은 LIFO[Last In First Out] 형식임) 입력값과 같다면 pop을 진행한다.
같지 않다면 NO를 출력하고 stack에 1을 저장한뒤 종료한다.
예를들어 4가 들어온다면
while문을 통해 stack에 1,2,3,4가 저장된다.
stack에 맨 뒤에 값이 4이므로 pop을 통해 출력하고 다음 입력값을 받는다.
if not stack:
print("\n".join(result))
만약 스택이 비어있다면 result를 출력한다.
NO인경우 1을 저장하기 때문에 절때 스택이 비어서 나올 수 없다.
'문제 > 백준_파이썬' 카테고리의 다른 글
157. 18258(큐) - 파이썬 (0) | 2022.07.25 |
---|---|
156. 17298(오큰수) - 파이썬 (0) | 2022.07.25 |
154. 4949(균형잡힌 세상) - 파이썬 (0) | 2022.07.22 |
153. 9012(괄호) - 파이썬 (0) | 2022.07.21 |
152. 10773(제로) - 자바 (0) | 2022.07.20 |
Comments