문제 : https://www.acmicpc.net/problem/6549
스택을 이용하여 풀었다.
기본적인 원리는 idx:0부터 순회하며 stack에 집어넣는다
만약, stack의 top의 height보다 클경우 push
height보다 작거나 같을경우 아래의 과정을 거쳐 pop되고 push 진행
입력으로 "7 2 1 4 5 1 3 3"이 들어온다고 가정할 때, 들어오는대로 (idx,height)형태로 스택에 집어넣는다.
import sys
input=sys.stdin.readline
while True:
li=list(map(int,input().split()))
res=0
if li[0]==0:break
else:li.pop(0)
stk=[]
idx=0
for i in li:
if not stk:
stk.append((i,idx))
idx+=1
else:
if stk[-1][0]<i:
stk.append((i,idx))
idx+=1
else:
tmp_li=[]
while stk[-1][0]>=i:
now_val,now_idx=stk.pop()
if not stk:
res=max(res,now_val*(idx))
break
else:
res=max(res,now_val*(idx-stk[-1][1]-1))
stk.append((i,idx))
idx+=1
while stk:
now_val,now_idx=stk.pop()
if not stk:
res=max(res,now_val*(idx))
else:
res=max(res,now_val*(idx-stk[-1][1]-1))
print(res)