## 의사코드 ##
# deque 이용
# q = deque((i, v) for i, v in enumerate(numbers))
# answer의 초기값을 -1로 설정
# answer = [-1] * len(numbers)
# while q:
# idx, num = q.popleft()
# for i, n in q:
# 현재 원소(num)보다 가장 가까이 있으면서 큰 수가 있으면 현재 원소의 인덱스에 해당하는 answer 값을 n으로 변경
# if n > num:
# answer[idx] = n
# break
첫 번째 시도
from collections import deque
def solution(numbers):
answer = [-1] * len(numbers)
q = deque((i, v) for i, v in enumerate(numbers))
while q:
idx, num = q.popleft()
for i, n in q:
if n > num:
answer[idx] = n
break
return answer
def solution(numbers):
answer = [-1] * len(numbers)
stack = []
for i, n in enumerate(numbers):
# 현재 숫자가 이전 인덱스의 값보다 크면 answer의 이전 인덱스 값을 현재 숫자로 변경
while stack and numbers[stack[-1]] < n:
answer[stack.pop()] = n
# 스택에 현재 숫자의 인덱스 저장
stack.append(i)
return answer