Koala - 15기/기초 알고리즘 스터디

[백준/Python] 1874번 : 스택 수열

Zirulralra 2024. 7. 29. 00:28

1874번: 스택 수열 (acmicpc.net)


문제풀이

1. 입력받을 수의 개수를 받음

2. 원래의 수열을 original_series변수에 리스트 형식으로 저장한다.

3. 10까지 커지는 변수 num 설정. 원래의 수열보다 num이 작은 동안 정렬한 리스트(stack 변수)에 추가해준다.(+ '+'도 출력리스트에 추가해줌)

4. stack의 마지막 요소가 원래의 수열과 같을 때까지 pop()을 실행. (+ '-'도 출력리스트에 추가)

- 여기서 원래 수열이 끝까지 도달했음을 확인하기 위해 original_count 추가 (1씩 더해주는 형태. 정렬의 횟수와 관계없이 원래 수열과 정렬하고 있는 수열이 몇 번째까지 맞았는지를 확인하게 해줌.)

5. 스택이 존재하면 (즉, 정렬되지 않으면) 'NO'를 출력해준다.

6. 스택이 존재하지 않고 완전히 정렬되는 형태면 +, -를 출력한다.


소스코드

import sys
input = sys.stdin.readline

N = int(input())
stack = []
series = []
original_series = []
p_m_list = []
original_count = 0
num = 1

for n in range(1, N+1):
    original_series.append(int(input()))

while num <= N:
    stack.append(num)
    p_m_list.append("+")
    num += 1

    try:
        while stack[-1] == original_series[original_count]:
            series.append(stack.pop())
            p_m_list.append("-")
            original_count += 1
    except:
        pass

if stack:
    print("NO")
else :
    for i in range(len(p_m_list)):
        print(p_m_list[i])