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()
하기