N = int(input())
arr = list(map(int, input().split()))
ans = [-1] * len(arr)
stack = []
for i in range(len(arr)):
while stack and arr[i] > arr[stack[-1]]:
ans[stack.pop()] = arr[i]
stack.append(i)
print(' '.join(list(map(str, ans))))
백준 - 탑
리트코드 - 빗물 트래핑
과 근본적으로 비슷한 문제이다.
스택에 인덱스를 저장하고, for loop을 돌며, 해당 값이 stack의 값보다 크면 스택을 비워내며, 값을 저장하는 방식이다.