on my way

[백준 1874번] 스택 수열 (Python3, 실버4) 본문

algorithm/Python

[백준 1874번] 스택 수열 (Python3, 실버4)

wingbeat 2025. 1. 20. 03:58
반응형

https://www.acmicpc.net/problem/1874

 

처음엔 문제부터 이해하기 어려웠는데

스택에 1부터 n까지 숫자에 대해 하나하나 수를 push, 해당 수이면 pop하고, 다음 수를 탐색하고.. 이런 과정의 반복

1. push 1 (+), push 2 (+), push 3 (+), push 4 (+)
   현재 스택: [1, 2, 3, 4]
   수열에서 필요한 숫자: 4
   -> pop 4 (-)
   현재 스택: [1, 2, 3]

2. pop 3 (-)
   현재 스택: [1, 2]

3. push 5 (+), push 6 (+)
   현재 스택: [1, 2, 5, 6]
   수열에서 필요한 숫자: 6
   -> pop 6 (-)
   현재 스택: [1, 2, 5]

4. push 7 (+), push 8 (+)
   현재 스택: [1, 2, 5, 7, 8]
   수열에서 필요한 숫자: 8
   -> pop 8 (-), pop 7 (-)
   현재 스택: [1, 2, 5]

5. pop 5 (-), pop 2 (-), pop 1 (-)
   현재 스택: []

대략 이런 과정이다.

 

# 리팩토링 전
import sys
N = int(sys.stdin.readline())
seq = [int(sys.stdin.readline()) for _ in range(N)]

stack, op = [], []
cur = 1

for num in seq:
    # num 될때까지 숫자 추가
    while cur <= num:
        stack.append(cur)
        op.append('+')
        cur += 1
    if stack and stack[-1] == num:
        stack.pop()
        op.append('-')
    else:
        op.append('X')
        break
print("NO" if op[-1]=='X' else '\n'.join(op))

 

프로그래머스면 바로 return 하면 되는데 백준은 어쩌지 싶었더니 sys.exit(0) 라는게 있더라

    else:
        print("NO")
        sys.exit(0)
print('\n'.join(op))

시간은 4ms 정도 빠름

반응형