
제가 롯데월드를 가고 싶어서 롯데월드타워 사진을 올려봤습니다. 아틀란티스 타고 싶다 ㅠ
for문으로for문으로 각 탑을 순회하고for문으로 이전 탑의 높이를 체크해야지! 라고 생각하셨을 수도 있습니다.
신호는 오른쪽 -> 왼쪽으로 이동하니, 오른쪽 탑부터 역순으로 차례로 높이를 확인합니다.
각 탑의 신호는 자신보다 왼쪽에 있는, 제일 가까운 높은 탑에서 받게 됩니다.
최근에 확인한 것부터 확인한다?? 저장한 데이터 중 제일 최신인 데이터를 먼저 확인할 수 있는 구조가 뭐였죠?
바로 스택이였죠!! 스택을 이용해 풀어봅시다.

N = int(input())
heights = list(map(int, input().split()))
stack = []
# answer[idx]: idx번째 탑의 신호를 받은 탑
# 단, 신호를 받지 못하면 0
answer = [0] * (N + 1)
for i in range(len(heights), 0, -1):
height = heights[i - 1]
# 스택 맨 위에 저장된 탑의 신호를, 현재 탑이 받는 경우
while stack and stack[-1][1] <= height:
answer[stack.pop()[0]] = i
# 현재 탑을 스택에 추가
stack.append((i, heights[i - 1])) # 탑 번호, 탑 높이
print(*(answer[1:]))
heights 배열을 역순으로 순회하며, 스택에 (탑 번호, 탑 높이)를 삽입합니다.answer 배열에 결과값을 저장해 둡니다.(탑 번호, 탑 높이)를 푸시해야 합니다.for문을 1회 순회하기 때문에 while문을 순회하긴 하지만, 팝은 전체 총 탑의 수인 최대 번까지만 이루어지므로 시간 복잡도에 영향을 주지 않음