본문 바로가기
Problem Solving/BOJ

[BOJ][Python]백준 1874 풀이

by NoiB 2022. 2. 15.
반응형

이번엔 지문이 헷갈려서 고민을 좀 했던 문제입니다.

 

https://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

 

import sys
ssr = sys.stdin.readline

n = int(ssr())
stack = [0]
stack1 = list(reversed([i for i in range(1,n+1)]))
stack2 = []
main = [int(ssr()) for _ in range(n)]
result = []
for i in main:
    num = i
    if stack[len(stack)-1] < num:
        while stack[len(stack)-1] < num:
            stack.append(stack1.pop())
            result.append('+')
        stack2.append(stack.pop())
        result.append('-')
    elif stack[len(stack)-1] == num:
        while stack[len(stack)-1] == num:
            stack2.append(stack.pop())
            result.append('-')
    else:
        print('NO')
        break

if main == stack2:
    for i in result:
        print(i)

 

지문에서 말하는 push는 오름차순으로만 가능하다 라는 부분이 조금 헷갈렸는데요. 결론적으로는 마지막 숫자보다 큰 숫자가 나오면 push를, 아니라면 pop을, 더 이상 pop을 할 수 없다면 NO를 출력하는 문제였습니다. 저는 조금 편하게 하려고 역순으로 배치한 리스트를 하나 만들어놓고 거기서 원소를 빼와서 stack에 저장하는 방식을 사용했는데요. 해놓고 보니까 굳이 필요가 없었던 것 같기도 하네요.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]백준 2805 풀이  (0) 2022.02.19
[BOJ][Python]백준 1966 풀이  (0) 2022.02.19
[BOJ][Python]백준 1654 풀이  (0) 2022.02.15
[BOJ][Python]1002 풀이  (0) 2021.12.30