본문 바로가기

백준

[백준] 1874 - 스택 수열

반응형

1. 문제

2. 코드

n = int(input())
n_l = []
stack = []
flag = 0
cnt = 1
for i in range(n):
    temp = int(input())
    
    if len(stack) != 0 and stack[len(stack)-1] == temp:
        stack.pop()
        n_l.append('-')
    elif flag == 0:
        while 1:
            stack.append(cnt)
            n_l.append('+')
            cnt += 1
            if stack[len(stack)-1] == temp :
                stack.pop()
                n_l.append('-')
                break
            if cnt > n:
                flag = 1
                break


if flag == 0:
    for i in n_l:
        print(i)
else:
    print('NO')

 

3. 풀이

-1) 입력을 한 숫자씩 읽고

              (1) stack의 제일 위 숫자가 그 입력과 같으면 pop.

                         - pop했으면 n_l (+인지 -인지 결과를 담고 있는 리스트)에 -를 담아준다.

              (2) 그게 아니면 입력 수가 될 때까지 1부터 차례대로 stack에 append 해주다가 해당 숫자가 stack의 제일 위에 들어오면 pop

                         - append(push)하면 n_l에 +를 push 해주고

                         - pop하면 n_l에 -를 push 해준다

 

-2) 만약 stack에 넣는 수가 입력숫자의 개수보다 커지면 flag(NO를 감지하는)가 1이 된다.

 

-3) 입력이 끝났을 때도 flag가 0이면 n_l에 있는 결과를 하나씩 출력해주고, 1이면 NO를 출력해준다.

728x90
반응형