거누의 개발노트

[파이썬] 백준 - 스택수열 - 1874 본문

코딩테스트

[파이썬] 백준 - 스택수열 - 1874

Gogozzi 2022. 5. 16. 17:43
반응형

문제

스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.

1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.

입력1

8
4
3
6
8
7
5
2
1

출력1

+
+
+
+
-
-
+
+
-
+
+
-
-
-
-
-

입력2

5
1
2
5
3
4

출력2

NO

힌트

#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]을 얻을 수 있다.

작성한 코드 - 이중 for 문

import sys

n = int(sys.stdin.readline())
lst=[int(sys.stdin.readline().strip()) for i in range(n)]
stack = []
answer = []

cnt = 1
status = True
for i in range(n):
    while cnt <= lst[0]:
        stack.append(cnt)
        cnt +=1
        answer.append('+')
    if stack[-1] == lst[0]:
        lst.pop(0)
        stack.pop()
        answer.append('-')
    else:
        status = False
        break

if status:
    print('\n'.join(answer))
else:
    print('NO')

 

 

백준에서 확인

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

회고

처음에 문제를 접했을 때는 무슨 문제인지 이해가 되지 않았다.

힌트를 보니까 "아~" 했지만, 아직까지 잘 적히지는 않는다.

결국 구글링해서 답을 보고 다시 이해한데로 풀어본 풀이이다.

반응형
Comments