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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
N = int(input()) #수열의 크기 N
des = [] # 만들고자 하는 수열 des
stack = [] # 원소들을 push, pop 리스트
new_des = [] # pop한 원소들 저장 리스트
res = [] # +, - 저장 리스트
count = 0
for i in range (N) :
des.append(input()) #만들고자 하는 수열 받아서 저장
i = 1
for _ in range (N) :
while (i <= int(des[count])) :
stack.append(i)
i += 1
# pop 해야하는 숫자가 stack에 들어갈 때 까지 append
res.append('+')
if (int(des[count]) == stack[len(stack) - 1]) :
new_des.append(stack.pop())
# stack의 맨 위의 수 == 뽑아야하는 수 -> pop
res.append('-')
count += 1
# stack 수열 만들 수 있는지 확인
if len(stack) != 0
print("NO")
else :
print("\n".join(res))
|
cs |
- stack을 사용하여 주어진 수열을 만들 수 있으려면, for문이 끝나고 나서 stack 리스트에 남은 원소가 없어야 한다.
- 원하는 숫자가 stack 리스트의 맨 뒤에 있어야 한다.
'Algorithm > Greedy, Implementation' 카테고리의 다른 글
[Python] 백준 #7568 덩치 (0) | 2022.02.26 |
---|---|
[Python] 백준 #1181 단어 정렬 (0) | 2021.06.21 |
[Python] 백준 #1085 직사각형에서 탈출 (0) | 2021.06.21 |