2493 : 탑

JinJinJara·2023년 8월 20일
1

백준 2493) 탑 문제 바로가기 >

예제

5
6 9 5 7 4
>> 0 0 2 2 4

< top_lst 배열 >

Idx01234
value69574

풀이

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

0개의 댓글