Back/Algorithm

Python 백준 1874 스택수열 알고리즘

Python 백준 1874 스택수열 알고리즘

www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

n = int(input()) # 처음 입력하는 n값
# 이 수에 따라 총 몇개의 원소를 가진 수열인지 정해짐
s = [] # 수열을 판단할 임시 리스트
op = [] # 나중에 출력할 +, - 리스트
count = 1
temp = True
for i in range(n):
    num = int(input())
# 처음 입력된 n값 만큼 입력을 계속 받고,
    while count <= num:
    # 입력된 num값이 count보다 커질 때 while문을 탈출
    # 처음 입력값이 4라면 count는 처음 전역변수로1이었으니
    # while문은 계속 돌아감
        s.append(count)
    # s에 count값을 붙여준다.
        op.append('+')
        count += 1
    # 이 부분은 나중에 출력할 값인 + 를넣어준다
    # 1234에서 4로 이동하기 위해 1씩 더해줬으니
    # +를 추가해준 것,
    # 4라고 가정함녀 그 후 1,2,3,4까지 왔으니 4번을 더 한다.
    # 4까지 왔으면 while문을 탈출하고
    # 현재 s에는 1,2,3,4가 와있고, count는 4가되있을 것,
    if s[-1] == num:
        #만약 s의 마지막 부분이
        # 입력된 num값과 같다면
        s.pop() # s의 마지막을 제거해주고
        op.append("-")
        # 이부분은 pop으로 뺐으니 op 리스트에 -를 해준다.
        
    else:
        temp = False
if temp == False:
    print('NO')
    # 만약 for문을 다 거쳤는데, 위의 조건과 일치하지 않으면 False니 만들 수 없는 조건이라 NO를 프린트한다.
else:
    for i in op:
        print(i)
        # op 리스트에 쌓인 +, -를 출력한다.