• 방법 1. 틀림.. 테스트케이스부터 틀림
import sys
input = sys.stdin.readline
def push(x):
stack.append(x)
print("+")
print(stack)
def pop():
stack.pop()
print("-")
print(stack)
n = int(input())
seq = []
stack = []
flag = 0
for _ in range(n):
seq.append(int(input()))
for i in range(1,n+2):
if seq[flag] in stack:
pop()
flag += 1
else:
push(i)
i += 1
• 방법 2. 정답!!
import sys
input = sys.stdin.readline
cnt = 1
flag = True
stack = []
op = []
n = int(input())
for i in range(n):
num = int(input())
while cnt <= num: # num보다 같거나 작은 수 stack에 쌓음
stack.append(cnt)
op.append("+")
cnt += 1
if stack[-1] == num: # num과 스택의 top 숫자가 같으면 제거
stack.pop() # ?!?!?
op.append("-")
else:
flag = False # 스택 수열을 만들 수 없음
if flag == False:
print("NO")
else:
for i in op:
print(i)
• 방법 1.이 분명 손으로 로직 짰을 때는 문제가 없어보였는데 테스트케이스를 넣어보면 왜 틀리는지 모르겠다.. 조금 더 봐야할 문제인 것 같다