본문 바로가기

Programming [Python]/백준 알고리즘 솔루션

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

https://www.acmicpc.net/problem/1874

 

#Solution

쉽게 접근하기 위해서 여러 리스트를 만들었다. 1) 정답 리스트 2) 정답과 비교할 리스트 3) 오름차순 리스트 4) 스택 5) 출력(+-)리스트

스택의 LIFO원리를 이용하면 쉽게 만들 수 있다.

numbers = int(input())
answer_list = []
ascending_num_list = []

#먼저 맞는지 확인해야할 answer_list를 생성한다.
for _ in range(numbers):
    answer_list.append(int(input()))

#정답리스트와 비교할 compare_list를 생성한다.
ascending_num_list = sorted(answer_list)
stack = []
result = []
compare_list = []
i = 0
for num in ascending_num_list:
    if stack and stack[-1] == answer_list[i]:
        try:
            while stack[-1] == answer_list[i]:
                compare_list.append(stack.pop())
                result.append('-')
                i += 1
        except:
            stack.append(num)
            result.append('+')
            continue
    stack.append(num)
    result.append('+')

for _ in range(len(answer_list) - i):
    compare_list.append(stack.pop())
    result.append('-')

if answer_list == compare_list:
    for i in result:
        print(i, end = "\n")
else:
    print("NO")