백준 | 스택 수열

jeonghens·2025년 2월 11일

알고리즘: BOJ

목록 보기
122/125

백준 스택 수열


다음과 같은 순서로 접근했다.

[1] 입력된 수열을 차례대로 확인한다.
[2] 현재 스택에 push할 숫자(current)가 가져온 값(num)과 같아질 때까지 스택에 push 연산(+)을 수행한다.
[3-1] 스택의 top 값이 가져온 값(num)과 같다면, pop 연산(-)을 수행하여 스택에서 제거한다.
[3-2] 스택이 비어 있거나, 스택의 top 값이 가져온 값(num)과 다르다면, 해당 수열을 만들 수 없다. 그러므로 "NO"를 출력하고 종료한다.
[4] 위 과정을 반복하고, break 없이 정상적으로 반복문이 종료되었다면, answer에 저장된 연산 결과를 출력한다.


import sys

n = int(sys.stdin.readline().strip())
arr = [int(sys.stdin.readline().strip()) for _ in range(n)]

stack = []      # 입력된 수열을 만들기 위한 스택
answer = []     # 필요 연산
current = 1     # 오름차순으로 입력할 숫자

for num in arr:
    while current <= num:
        stack.append(current)
        answer.append("+")

        current += 1

    if stack and stack[-1] == num:
        stack.pop()
        answer.append("-")
    else:
        print("NO")
        break
else:
    print("\n".join(answer))
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글