[Python] 백준 2493번: 탑

Jonie Kwon·2022년 4월 24일
1


https://www.acmicpc.net/problem/2493

풀이

순회를 돌면서 스택에 인덱스와 탑의 높이를 튜플로 저장
스택에 있는 탑들의 높이를 현재 탑의 높이와 비교
-> 현재 탑보다 작은 이전 탑들에서는 신호를 수신을 받을 수 없으므로 스택에서 제거
-> 현재 탑보다 크거나 같은 탑은 현재 탑에서의 신호를 수신 받을 수 있으므로 수신받는 탑의 인덱스+1을 정답에 저장

코드

import sys
input = sys.stdin.readline
n = int(input())
tops = list(map(int,input().split()))
answer= [0] * n
stack = []
#가장 먼저 만나는 높이가 같거나 큰 탑에서 수신가능
for i in range(len(tops)):
    while stack:
        if tops[stack[-1][0]]<tops[i]:
            stack.pop()
        else:
            answer[i] = stack[-1][0]+1
            break
    stack.append((i,tops[i]))
print(*answer)

profile
메모하는 습관

0개의 댓글