https://www.acmicpc.net/problem/1874
공부 날짜 : 2023.01.17
정답 참조 여부 : X
스택에 수를 1~n까지 순서대로 넣거나 빼는식으로 입력된 수열을 만들 수 있는가를 묻는 문제이다.
수열은 스택에서 수를 꺼내면 수열에 입력되기 때문에 스택에 LAST IN 한 수가 수열의 수보다 높으면 수열을 만들 수 없다.(작은경우는 수를 순서대로 스택에 넣은뒤 POP하면 된다.)
그래서 문제는 스택에 들어있는 수가 수열보다 작으면 스택에 수를 순서대로 입력하고 같으면 pop했다. 그러다가 스택에 들어있는 수가 수열보다 크면 NO를 출력하고 exit()해줬더니 정답으로 나왔다.
조금 쉬운문제들이라서 주석 적는게 습관이 잘 되지 않는다.... 쉬운 문제도 주석을 다는 연습을 해야 할거 같다.
import sys
input = sys.stdin.readline
#################################################
n = int(input())
sequence = []
for _ in range(n):
sequence.append(int(input()))
stack = [-1]
i = 1
answer = []
while sequence:
if stack[-1] == sequence[0]:
stack.pop(-1)
sequence.pop(0)
answer.append("-")
elif stack[-1] != sequence[0]:
stack.append(i)
i += 1
answer.append("+")
if sequence and stack[-1] > sequence[0]:
print("NO")
exit()
for char in answer:
print(char)