sm 기술 블로그

155. 1874(스택 수열) - 파이썬 본문

문제/백준_파이썬

155. 1874(스택 수열) - 파이썬

sm_hope 2022. 7. 22. 15:47
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