Koala - 15기/기초 알고리즘 스터디
[백준/Python] 1874번: 스택 수열
oerreo
2024. 7. 26. 21:49
https://www.acmicpc.net/problem/1874
문제
풀이
input = __import__('sys').stdin.readline
n = int(input())
x = 1
arr = []
out = []
flag = True
for _ in range(n):
a = int(input())
while 1:
if arr and a<arr[-1]:
flag = False
break
elif arr and a == arr[-1]:
arr.pop()
out.append("-")
break
else:
arr.append(x)
out.append("+")
x+=1
if not flag:
print("NO")
break
if flag:
print("\n".join(out)) #이렇게 안 하고 매번 출력 하면 출력초과 생김.
스택에 1~n의 수를 차례대로 push하면서 중간중간 원하는 수를 pop하여 수열을 만드는 문제
-> arr을 stack으로 사용
1. n이 커질수록 입력 시행횟수가 증가하기에 표준입력으로 받을 수 있게 함.
2. 1~n까지 순서대로 push해야하기에 따로 x라는 변수를 만들어 1씩 증가하며 스택에 추가되도록 함.
3. if arr : 로 스택이 비어있는지 확인
4. 스택이 비어있으면 push
5. 비어있지 않을 때 스택의 Last In(arr[-1])과 수열의 다음 값인 a와 다르다면 push / 같다면 pop
6. 만약 스택의 Last In보다 수열의 다음 값이 작다면 pop할 경우 수열의 순서대로 원소를 가져올 수 없기에
flag를 False로 초기화 후 모든 loop를 break