import sys
from collections import deque
N = int(input())
A = list(map(int, sys.stdin.readline()[:-1].split(' ')))
stack = []; stack.append(0)
ans = ['-1' for i in range(N)]
for i in range(1, N):
while A[stack[-1]] < A[i]:
if not stack:
break
ans[stack.pop()] = str(A[i])
if not stack:
break
stack.append(i)
print(' '.join(ans))
- A 받을 때 str을 int로 map, map객체를 list로 변환
- N이 1,000,000이라 O(N)으로 처리해야함
- stack에는 A를 순회하며 A의 index를 저장
- A[i]이 A[stack[-1]] 보다 크면 ans[stack[-1]]에 A[i]를 저장
- for문에서 반복할 때마다 stack에 index 넣어줘야함 (예를 들어, A[1]가 A[2]보다 클 때, A[2]의 오큰수는 A[1]의 오큰수가 되기 때문)