Algorithm Problems

[백준] [Python] 2493번 탑 - 스택 - [대표예제]

WakaraNai 2021. 5. 22. 14:30
728x90
반응형

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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

 

 

 

Python

import sys

n = int(sys.stdin.readline())
top = list(map(int,sys.stdin.readline().split()))
ans = [0]*n

stack = [(top[0],1)]
for i,t in enumerate(top[1:],1):
    while stack and stack[-1][0] < t:
        stack.pop()
    if stack:
        ans[i] = stack[-1][1]
    stack.append((t,i+1))
    #print(t,i)
    
    
print(" ".join(map(str,ans)))
# 0 0 2 2 4

 

 

짧은 풀이

ans i, t stack
0 1, 6 [ (6,1) ]
0 2, 9 [ (9,2) ]
2 3, 5 [ (9,2), (5,3) ]
2 4, 7 [ (9,2), (7,4) ]
4 5, 4 [ (9,2), (7,4), (4,5) ]
728x90
반응형