on my way
[백준 1874번] 스택 수열 (Python3, 실버4) 본문
반응형
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 정도 빠름
반응형
'algorithm > Python' 카테고리의 다른 글
[프로그래머스 코딩테스트 연습] 주식가격 (Python3) (0) | 2025.01.21 |
---|---|
[프로그래머스 코딩테스트 연습] 괄호 회전하기 (Python3) (0) | 2025.01.20 |
[프로그래머스 코딩테스트 연습] 압축 (Python3) (0) | 2025.01.20 |
[프로그래머스 코딩테스트 연습] 귤 고르기 (Python3) (0) | 2025.01.16 |
[프로그래머스 코딩테스트 연습] 베스트 앨범 (Python3) (0) | 2025.01.16 |