5
6 9 5 7 4
>> 0 0 2 2 4
< top_lst 배열 >
| Idx | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| value | 6 | 9 | 5 | 7 | 4 |
import sys
N = int(sys.stdin.readline())
top_list = list(map(int,sys.stdin.readline().split()))
stack = []
for idx, top in enumerate(top_list):
while len(stack) != 0 and stack[-1][1] < top:
stack.pop()
if len(stack) == 0:
print(0, end=" ")
else:
print(stack[-1][0] + 1, end=" ") # index는 0 부터 시작해서 +1 처리
stack.append((idx, top))
len(stack) == 0 : 처음 들어온 탑, 이전 값과 비교했을 때 더 높은 탑이 없을 때 처리하기 위한 로직stack.append((idx, top)) : 다음번째의 탑 높이와 비교를 위해 stack 에 쌓아주기print(stack[-1][0] + 1, end=" ") : 송신하는 탑이 아닌 수신 탑의 번호 처리를 위해 +1 필요len(stack) != 0 and stack[-1][1] : 현재 탑보다 이전 탑들이 낮다면 송신 받을 일이 없기 때문에 stack 에서 pop() 하기