스택을 사용했던 문제

어렵지 않았다. 예전에 시간초과 어떻게 해결했는지 기억이 나서 그런걸 수도

근데 답을 0 0 2 2 4 이렇게 출력해야되는데 [0,0,2,2,4] 이렇게 해서 한 20분 날렸네...

그리고 예전에 썻던 코드가 더 깔끔한거 실홥니까

import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

N = int(input())
buildings = list(map(int, input().split()))
stack = [(0,0)]
answer = []

# 각 빌딩마다
for i in range(N):
    # stack 에 남아있는 빌딩 높이마다
    while len(stack) != 0:

        # 지금 빌딩이 더 높거나 스택에 남아있는 빌딩 높이가 0일때
        if buildings[i] > stack[-1][0] and stack[-1][0] != 0:
            stack.pop()
        
        # 새로 들어온 빌딩이 스택 맨 오른쪽보다 낮을 때
        else :
            answer.append(stack[-1][1])
            stack.append((buildings[i], i+1))
            break

for ans in answer:
    print(ans, end=' ')

예전 코드

#(16) - 2493 탑
import sys
N  = int(input())
tops = [int(x) for x in sys.stdin.read().split()]
# index 저장해놓는 스택 
stack = [0]
sys.stdout.write('0 ')

for i in range(1,N):
    while len(stack)!=0 and tops[i] > tops[stack[-1]]:
        stack.pop()
    if len(stack) == 0:
        print ('0', end =' ')
    else:
        print(stack[-1]+1, end =' ')
    stack.append(i)