https://www.acmicpc.net/problem/1874
백준 1874번 스택수열
from sys import stdin
input = stdin.readline
n = int(input())
seq = [0 for _ in range(n)]
for i in range(n):
seq[i] = int(input())
now_v = 1
stack = [1]
ans = ["+"]
for target in seq:
while True:
if now_v < target:
ans.append("+")
now_v += 1
stack.append(now_v)
elif stack[-1] == target:
ans.append("-")
stack.pop()
break
else:
print("NO")
exit()
for i in ans:
print(i)
now_v : 차곡차곡 쌓여지는 자연수 스택에서 그 다음으로 들어갈 수를 저장하는 변수
stack 과 ans는 1이 들어간 상태에서 시작
입력받은 수열의 요소에 for문으로 접근
if now_v < target:
...
elif stack[-1] == target:
...
위 코드처럼 target과 now_v를 비교하고 그 다음 조건에선 stack[-1]과 비교하는게 좋은 코드인가 모르겠다.
ans = ""
...
if ...
ans += "+\n"
...
print(ans)
하지만 위 방식대로 ans를 처리하면 시간이 몇배로 많이 걸렸다.
문자열로 출력 시 4952ms
똑같은 코드를 단지 ans를 리스트로 하고, 마지막 출력 때 반복문을 통해 출력하면 196ms가 걸렸다.