import sys
input = sys.stdin.readline
while True:
N,*arr = list(map(int,input().split()))
if N == 0:
break
stack = [0]
arr = [0] + arr[:] +[0]
result = 0
for ind in range(1,len(arr)):
while stack and arr[ind] < arr[stack[-1]]:
height = arr[stack[-1]]
stack.pop()
width = ind - stack[-1]-1
result = max(result,height*width)
stack.append(ind)
print(result)
이 문제는 boj.kr/11873 의 하위호환이다.
11873의 문제를 푼것과 같이 stack에 현재위 index 즉 가로길이를 넣어주는 걸 한다.
그리고 이걸 좀 더 쉽게 구하기 위해, 양 끝에 [0]을 추가를 해준다.
그러면 스택에서 마지막 값에 위치한 높이보다 작은 높이가 들어오면,
그때 스택에서 값을 추출해서, 지금까지의 거리를 측정을 해준다.
측정 방식은 현재 index에서 stack의 마지막값을 빼준 값에 -1을 해준것이다.
이렇게 2개의 값을 곱한뒤 최대값을 저장해주면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 10421 수식 완성하기 (0) | 2021.06.06 |
---|---|
[BOJ/백준] 9470 Strahler 순서 (0) | 2021.06.06 |
[BOJ/백준] 3665 최종 순위 (0) | 2021.06.06 |
[BOJ/백준] 3165 5 (0) | 2021.06.06 |
[BOJ/백준] 2623 음악 프로그램 (0) | 2021.06.06 |