스택을 사용했던 문제
어렵지 않았다. 예전에 시간초과 어떻게 해결했는지 기억이 나서 그런걸 수도
근데 답을 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)