해당 숫자보다 뒤에 있는 수 중 크면서 제일 가까운 수를 정답 배열에 넣어 반환하는 문제이다.
너무나 간단하게 2차원 반복문을 생각했다. 하나 잡아서 뒤에 거 계속 돌리면 되지 않겠는가? 찾으면 break해주고. 시간 초과가 걸릴 걸 알면서도 그냥 해봤다...
당연히 시간 초과!
그렇다면 시간 초과가 나지 않게 하기 위해서 어떻게 해야 할까? 고민해봤지만, 답이 나오지 않아서 다른 사람의 풀이를 참고했다.
내가 참고한 풀이는 스택을 이용했는데, 스택이 FIFO이라는 점을 이용한 것이다.
def solution(numbers):
last = []
answer = []
for number in reversed(numbers):
# 만일 뒤에 최대값이 존재하면
if len(last) > 0:
while len(last) > 0:
# 만일 맨 마지막 최대값이 현재 값보다 크면
if number < last[-1]:
answer.append(last[-1])
last.append(number)
break
# 만일 맨 마지막 최대값이 현재 값보다 작으면
else:
last.pop()
# 만일 뒤에 최대값이 존재하지 않으면
# 여기서 else를 쓰면 안 되는 것이, 만일 위의 if를 다 돌았는데 최댓값이 없을 때도 검사해야 하기 때문이다.
if len(last) == 0:
last.append(number)
answer.append(-1)
return answer[::-1]