하루일문

[백준] 1874번 스택 수열 (파이썬) 본문

algorithm/baekjoon

[백준] 1874번 스택 수열 (파이썬)

support_u 2023. 3. 2. 12:35

문제

 

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

문제를 간략하게 해설하자면

예시

오름차순으로 정렬된 1~8의 숫자를 스택으로 4 3 6 8 7 5 2 1의 순서로 출력하기 위해 push(+) pop(-)을 해주면 된다.

방법은 해설해서 설명하겠다

 

주위 : "No"가아닌 "NO"다! 입력을 주위하자

 

코드

import sys
input = sys.stdin.readline
from collections import deque

N = int(input())
num_li = deque([])
answer = []
maxi = 0

for i in range(1, N + 1):
    num = int(input())

    if num > maxi:
        for j in range(maxi + 1, num + 1):
            num_li.append(j)
            answer.append("+")
        maxi = j
    
    if num == num_li[-1]:
        num_li.pop()
        answer.append("-")
    else:
        answer.append("No")

if "No" in answer:
    print("NO")
else:
    for i in answer: print(i)

 

해설

maxi는 나온 순서에서 제일 큰 num을 저장

num이 maix 보다 크다면 작은 순서대로 num_li에 추가하고

num과 num_li의 마지막이 같다면 num_li에서 제거하고

다르다면 오류가 나는 것이니 NO가 나오게 하였다.

나는 여기서 중간에 NO가 나와도 input은 계속 받아야하고 출력할때 NO가 있으면 다른 것은 출력할 이유가 없기 때문에 리스트로 받아서 NO가 있다면 NO가 나오고 아니면 리스트를 출력하게 했다.