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
- 이 문제의 경우, 처음에 손으로 직접 적어보고서 하니까 코드를 더 잘 적을 수 있었다.
- 경우를 크게 3가지로 나누었고, 마지막에 스택에 원소가 남아있을 경우 'NO'를 출력하도록 하였다.
- 스택이 비어있을 경우, 즉 처음의 상황(push)
- 스택의 맨 위의 원소가 입력받은 숫자보다 더 작을 때(push)
- 스택의 맨 위의 원소가 입력받은 숫자와 같을 때 (pop)
import sys
input = sys.stdin.readline
n = int(input().rstrip())
n_list = []
mark = []
add = 0
for i in range(1,n+1):
x = int(input().rstrip())
if not n_list: #n_list가 비었다면 (제일 처음에)
for j in range(i,x+1): # 입력받은 숫자까지 스택에 원소를 push
add = j+1
n_list.append(j)
mark.append('+')
elif n_list[-1] < x: # 스택의 맨 윗 원소가 입력받은 숫자보다 작을 경우 (해당 숫자가 될때까지 push)
for j in range(add,x+1): # 한번 더했던건 넘어가야 하는데, 또 더함 --> 이를 방지하기 위해 add사용
add = j+1
n_list.append(j)
mark.append('+')
if n_list[-1] == x: # 스택의 맨 윗 원소 == 입력받은 숫자 일때, pop
n_list.pop()
mark.append('-')
if not n_list: # 입력된 수열을 만들 수 있는 경우 (스택이 비었을 경우)
for i in mark:
print(i)
else: # 입력된 수열을 만들 수 없는 경우
print('NO')'Algoritm' 카테고리의 다른 글
| [백준]10870번: 피보나치 수5(python) (0) | 2022.09.27 |
|---|---|
| [백준] 2178번 : 미로 탐색 (python) (0) | 2022.07.12 |
| [백준] 1021번: 회전하는 큐 (python) (0) | 2022.07.06 |
| [백준] 10866번: 덱 (python) (0) | 2022.07.06 |
| 덱(Deque) (0) | 2022.06.26 |