728x90
- 문제
히스토그램은 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형이다. 각 직사각형은 같은 너비를 가지고 있지만, 높이는 서로 다를 수도 있다. 예를 들어, 왼쪽 그림은 높이가 2, 1, 4, 5, 1, 3, 3이고 너비가 1인 직사각형으로 이루어진 히스토그램이다.
히스토그램에서 가장 넓이가 큰 직사각형을 구하는 프로그램을 작성하시오.
- 입력
입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤ 1,000,000,000)가 주어진다. 이 숫자들은 히스토그램에 있는 직사각형의 높이이며, 왼쪽부터 오른쪽까지 순서대로 주어진다. 모든 직사각형의 너비는 1이고, 입력의 마지막 줄에는 0이 하나 주어진다.
- 출력
각 테스트 케이스에 대해서, 히스토그램에서 가장 넓이가 큰 직사각형의 넓이를 출력한다.
- 코드
whilev True:
temp = list(map(int, input().split()))
n = temp[0]
if n == 0:
break
heights = temp[1:]
heights.insert(0, 0)
heights.append(0)
check = [0]
area = 0
for i in range(1, n+2):
while check and heights[i] < heights[check[-1]]:
cur_idx = check.pop()
area = max(area, (i-1-check[-1])*heights[cur_idx])
check.append(i)
print(area)
- 출처
728x90
'알고리즘' 카테고리의 다른 글
백준 14499번: 주사위 굴리기 (python, 파이썬) (0) | 2020.10.14 |
---|---|
백준 1406번: 에디터 (python, 파이썬) (0) | 2020.10.14 |
백준 1920번: 수 찾기 (python, 파이썬) (0) | 2020.10.12 |
백준 11047번: 동전 0 (python, 파이썬) (0) | 2020.10.08 |
백준 11399번: ATM (python, 파이썬) (0) | 2020.10.08 |
댓글