for문으로 풀면 시간초과가 걸려서 stack으로 풀었습니다.
문제에선 오른쪽에서 왼쪽으로 진행되어서 입력받는 역순으로 풀었었는데 반대로 생각해보면
입력받았을 때 왼쪽에 수신을 받는 친구가 없다면 입력받은 탑이 현재 가장 높은 탑이되어버리니
다음 입력에서는 현재 입력받은 탑을 기준으로 왼쪽에 있는 탑들은 필요가 없어지는 것입니다
import Foundation
let n = Int(readLine()!)!
let arr = readLine()!.components(separatedBy: " ").compactMap { Int($0) }
var stack: [(height: Int, index: Int)] = [(100000001, 0)]
for index in 0..<arr.count {
let height = arr[index]
while !stack.isEmpty && stack.last!.height < height {
stack.removeLast()
}
print(stack.last!.index, terminator: " ")
stack.append((height, index+1))
}