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 |