[BOJ] 1874 스택 수열

nerry·2022년 1월 17일
0

알고리즘

목록 보기
10/86

1874 스택 수열

# me
import sys
input=sys.stdin.readline

n=int(input())
nums=[int(input()) for i in range(n)]

turn=1
stack=[] # nums에 맞게 출력하기 위해 임시로 담아두는 곳. 순서대로 들어가야하기에 스택으로 구현
index=0
res=[] # NO일 때는 NO만 나와야 해서 결과는 한번에 출력해야 함

while turn<n+1: # 1-n까지 다 돌기 전까지 진행
    if not stack or stack[-1] != nums[index]: 
    	# 스택이 비었거나, 출력해야할 nums와 스택에 담겨있는 것과 맞지 않을때 스택에 넣기
        # 스택[-1]인 이유는 순서대로 출력하도록 이번에 출력할 수 있는 순서를 지키기 위해서
        stack.append(turn)
        res.append('+')
        turn+=1
    if stack[-1]==nums[index]:
    	# 출력해야할 nums와 스택에 담겨있는 것이 맞을 때, 출력하고 index를 증가해 다음 nums를 가리킨다.
        stack.pop()
        res.append('-')
        index+=1
if stack: # 모든 것을 다 돌고도 stack에 값이 남아있다면
    for s in reversed(stack): # stack 맨 뒤부터 순서를 돌면서
        if s != nums[index]: # 다음 nums와 맞지 않다면 NO를 출력하고, res를 비운다.
            print('NO')
            res.clear()
            break
        res.append('-') # 아니라면 res에 - 담기
        index+=1
for r in res: # res가 있으면 순서대로 출력
    print(r)
n = int(input())
s = []
op = []
count = 1
temp = True
for i in range(n):
    num = int(input())
    while count <= num:
        s.append(count)
        op.append('+')
        count += 1
    if s[-1] == num:
        s.pop()
        op.append('-')
    else:
        temp = False
if temp == False:
    print('NO')
else:
    for i in op:
        print(i)

먼저 담고, 체크한다. 체크하면서 더이상 맞지 않는다면 bool 타입인 temp를 false로 바꾼다.
의문점
1. 순서가 맞지 않으면 무조건 false로 바뀌는 게 아닌가? 🤔

profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글