Algorithm/Python

[백준 1874] 스택 수열

🥭맹2 2021. 4. 22. 20:56

1. 문제

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

2. 접근 방법

1. 인풋을 담을 리스트

2. pop, push할 숫자를 담은 range(N, 0, -1)리스트

3. stack 역할을 할 리스트

4. result를 담을 리스트 (수열을 만들 리스트)

 

이렇게 총 4개의 리스트가 필요하다

 

현재 보고 있는 숫자(stack)보다 클 경우 push하다가 원하는 숫자에서 pop을 하면되는데, 

만약 현재 숫자보다 작을 경우 pop을 통해 원하는 숫자까지 pop을 해야한다. 따라서 만들 수 없음 ~!

 

이 점만 유의한다면 쉽게 풀이할 수 있다.

3. 코드

python

N = int(input())
inputs = [int(input()) for _ in range(N)]
numbers = list(range(N, 0, -1))
stack = [0]
result = []
print_lst = []
flag = True

for i in range(N):
    if inputs[i] != stack[-1]:
        if inputs[i] > stack[-1]:
            while inputs[i] != stack[-1]:
                stack.append(numbers.pop())
                print_lst.append('+')
        elif inputs[i] < stack[-1]:
            print('NO')
            flag = False
            break
    if inputs[i] == stack[-1]:
        result.append(stack.pop())
        print_lst.append('-')

if flag:
    print(*print_lst, sep="\n")

4. 마치며

.

'Algorithm > Python' 카테고리의 다른 글

[백준 7568] 덩치  (0) 2021.04.22
[백준 1181] 단어 정렬  (0) 2021.04.22
[백준 2156] 포도주 시식  (0) 2021.04.22
[백준 20061] 모노미노도미노2  (0) 2021.04.22
[백준 17837] 새로운 게임2  (0) 2021.04.21