그냥 생각나는대로 입력받으면 일단 list에 넣고 정렬해서 풀었더니 시간초과.
시간 초과 난 첫 시도는 다음과 같다.
n = int(input())
input_lst = []
for i in range(n):
input_lst.append(int(input()))
sorted_lst = sorted(input_lst, reverse=True)
stack = []
check = []
def stack_nums():
re_val = True
for num in input_lst:
while num not in stack:
stack.append(sorted_lst.pop())
check.append('+')
now = stack.pop()
if now == num:
check.append('-')
else:
re_val = False
return re_val
return re_val
result = stack_nums()
if result:
for n in check:
print(n)
else:
print('NO')
어차피 중간에 비는 값 없이 n개가 전부 나오니까 그냥 하나 입력받고 바로바로 처리해 주면 훨씬 시간이 단축된다. 나는 중간에 비는 값이 있을 수 있는 줄 알고, 끝까지 입력받고 이걸 정렬해서 풀었다. 문제 파악도 중요한 것 같다.
n = int(input())
stack = []
check = []
last = 1
state = True
for i in range(n):
now_in = int(input())
for num in range(last, now_in+1):
stack.append(num)
check.append('+')
last += 1
if now_in == stack[-1]:
stack.pop()
check.append('-')
else:
state = False
if state:
for j in check:
print(j)
else:
print('NO')
딱히 예외 처리해줄 것도 없고 까다로운 문제는 아니었는데 생각보다 너무 오래걸렸다.... 연습 많이 해야겠다.
다음 날 다시 풀어볼 때, input() 안 쓰고 readline() 사용
더 빠르다는 건 알고 있었으나, 귀찮아서,, 안 썼는데 무조건 써야겠다. 시간 차 많이 남.
while문이 더 편할 것 같아서 while 문 사용하고, 실패했을 때 break 걸어 줌.
import sys
n = int(sys.stdin.readline())
stack = []
check = []
last_num = 1
result = True
for i in range(n):
num = int(sys.stdin.readline())
while last_num <= num:
stack.append(last_num)
check.append('+')
last_num += 1
if stack[-1] == num:
stack.pop()
check.append('-')
else:
result = False
break
if result:
for j in check:
print(j)
else:
print('NO')