[백준]1874번/스택 수열

Effy_ee·2024년 1월 23일
0

코딩테스트

목록 보기
88/118

📖문제
https://www.acmicpc.net/problem/1874

import sys

def solution(n, l):
    index = 1  # 현재 스택에 푸시해야 할 숫자를 추적하는 변수
    stack = []  # 실제 숫자를 푸시하고 팝하는 스택
    answer = []  # '+' 또는 '-' 연산을 저장하는 리스트

    for num in l:
        # num에 도달할 때까지 숫자를 스택에 푸시
        while index <= num:		
            stack.append(index)
            answer.append('+')  # 푸시 연산을 기록
            index += 1  # 다음 푸시해야 할 숫자로 업데이트

        # 스택의 top이 현재 수열의 숫자와 같다면 팝 연산 수행
        if stack[-1] == num:
            stack.pop()
            answer.append('-')  # 팝 연산을 기록

        # 스택의 top에 있는 숫자가 현재 수열의 숫자보다 크면
        # 수열을 만들 수 없으므로 'NO'를 출력하고 함수를 종료
        if stack and stack[-1] > num:
            print('NO')
            return

    # 가능한 연산 과정 출력
    print('\n'.join(answer))

# 표준 입력으로부터 데이터를 받음
n = int(sys.stdin.readline().rstrip())
l = []
for _ in range(n):
    l.append(int(sys.stdin.readline().rstrip()))

# 솔루션 함수 호출
solution(n, l)

0개의 댓글