https://www.acmicpc.net/problem/1874
import sys
input = sys.stdin.readline
n = int(input())
arr = [int(input()) for _ in range(n)]
stack = []
output = []
for i in range(1, n+1):
stack.append(i)
output.append("+")
while stack:
if stack[-1] == arr[0]:
stack.pop()
arr.pop(0)
output.append("-")
else:
break
if len(output) == 2 * n:
print("\n".join(output))
else:
print("NO")
arr
: 입력한 수열stack
: 스택output
: 출력할 +, -가 순서대로 저장됨stack
에 i
를 push (output
에 "+" 추가)stack
에 값이 존재하면, stack
의 마지막 원소와 arr
의 첫번째 원소를 비교output
에 "-" 추가output
검사output
의 길이가 2*n
이라면 정상이므로 output
출력직관적으로 이해가 되는 풀이는 아닌 것 같다.
import sys
input = sys.stdin.readline
n = int(input())
arr = [int(input()) for _ in range(n)]
stack = []
output = []
now = 1
possible = True
for num in arr:
while now <= num:
stack.append(now)
output.append("+")
now += 1
if stack and stack[-1] == num:
stack.pop()
output.append("-")
else:
possible = False
break
if possible:
print("\n".join(output))
else:
print("NO")