제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가진 stack 구조를 이용하는 문제

 

문제 예시에서 만들어야 하는 수는 차례로

4, 3, 6, 8, 7, 5, 2, 1

이다.

 

1부터 8까지 숫자를 이용해서 만드는 것이다.

1,2,3,4 쌓고 (stack=[1,2,3,4])

pop() ->4  (stack=[1,2,3])

pop() ->3  (stack=[1,2])

5,6 쌓고  (stack=[1,2,5,6])

pop() ->6 (stack=[1,2,5])

pop() ->5 (stack=[1,2])

7,8쌓고  (stack=[1,2,7,8])

pop() ->8  (stack=[1,2,7])

pop() ->7  (stack=[1,2])

pop() -> 2 (stack=[1])

pop -> 1 (stack=[])

 

내가 만들어야 하는 숫자(n)의 순서를 리스트에 담고,

숫자 1(cnt)부터 시작해서 비교한다.

 

 

N=int(input())
stack=[]
result=[]
cnt=1
for _ in range(N):
    n=int(input())
    while cnt <= n :
        stack.append(cnt)
        cnt+=1
        result.append('+')
    if n==stack[-1]:
        stack.pop()
        result.append('-')

if not stack:
    print('\n'.join(result))
else:
    print('NO')

 

리스트 요소 한줄씩 출력하는

print('\n'.join(result))

표현법 기억하기!