[1874번] 스택 수열

HYEOB KIM·2022년 6월 3일
1

algorithm

목록 보기
23/44
post-custom-banner

백준 1874번 스택 수열

코드 풀이

  • result에 결과값을 굳이 담아주고 이후에 출력한 이유는 만약 스택 수열을 만들지 못하는 입력값일 경우, NO만 출력해야 하기 때문입니다.
  • cnt > n + 1의 조건이 cnt > n이 아닌 이유는 코드 상 n값과 입력값이 같을 때 cnt += 1을 거치면서 cntn + 1이 되는 경우가 나오기 때문입니다. 어차피 스택 수열을 만들지 못한다면 cnt는 무한정 커질 것이므로, cnt > n + 1의 조건을 설정했습니다.
import sys
input = sys.stdin.readline

n = int(input())
stack = [0]
cnt = 1   # 다음 번에 스택에 쌓여야 할 수
result = []   # +, - 가 담길 결과값
for _ in range(n):
    num = int(input())   # 입력값을 한 줄씩 받음.
    while True:
    	# 수열이 만들어지지 않으면 n+1을 초과해 무한정 커지므로 반복을 멈춤.
        if cnt > n + 1:
            break
        
        # 스택의 가장 마지막 수가 입력값이 아니라면, 스택에 차례대로 수가 쌓임.
        if stack[-1] != num:
            stack.append(cnt)
            cnt += 1   # 다음 번에 쌓여야 할 스택의 수는 +1
            result.append('+')
        else:
        	# 스택의 가장 마지막 수와 입력값이 같다면 그 수를 뽑아내고, 다음 입력값을 받기 위해 while문을 멈춤.
            stack.pop()
            result.append('-')
            break

# n+1보다 스택에 쌓여야 할 수(cnt)가 커진다면 스택 수열을 만들 수 없는 입력값이므로 `NO`를 출력
if cnt > n + 1:
    print('NO')
else:
    for i in result:
        print(i)
profile
Devops Engineer
post-custom-banner

0개의 댓글