스택을 활용하여 풀수 있다.
ex)
6 9 5 7 4
꺼내지지 못한 stack 속 탑들은 수신 가능한 탑이 없음을 알 수 있음 -1로 치환
수신 가능한 탑들을 꺼낼 때 인덱스를 잘 저장해두었다가 그 인덱스에 맞게 수신 가능한 탑 인덱스를 적어주어야 한다.
from collections import deque
N = int(input())
tops = list(map(int, input().split()))
S = list() #스택
outs = [0]*N #인덱스 저장
tops.reverse() #뒤집어서 보기
S.append([tops[0], N-1]) #첫번째 탑 (탑, 인덱스)
num = N-1 #몇번째 탑인지
for i in range(1, N):
length = len(S)
idx = len(S)-1
for j in range(length):
if S[idx][0] <= tops[i]:
outs[S[idx][1]] = num #해당 인덱스 탑에 수신한 탑 넣어주기
S.pop()
idx -= 1
else: break #탑보다 작은 탑이 있었다면 이미 수신 했을 것이므로
S.append([tops[i], N-i-1])
num -= 1
for i in outs:
print(i, end = ' ')