인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
배열의 길이는 2 이상입니다.
def get_max_area(height):
left = 0
right = len(height)-1
area = 0
while left < right :
area = max(area, min(height[left], height[right])*(right-left))
if height[right] > height[left] :
left += 1
else :
right -=1
return area
물을 담을 수 있는 최대 넓이를 구하는 것이므로
높이를 양쪽 끝에서 부터 비교를 해야한다. 높이는 둘 중 더 낮은것이 높이이고, 밑 변은 오른쪽 인덱스 번호
- 왼쪽 인덱스 번호
이다.
위 사진을 예로 들면,
높이는 왼쪽이 더 높지만 오른쪽은 왼쪽에 비해 높이가 낮다. 오른쪽을 넘어서는 높이로 물을 담을 수는 없기때문에
왼쪽과 오른쪽중 최솟값
을 물을 담을 수 있는 높이로 지정한다.
오른쪽과 왼쪽이 만나지 않을때 까지 최대 넓이를 구한다.
이때 오른쪽의 높이가 왼쪽의 높이보다 크다면 왼쪽 인덱스 번호를 증가시키고, 왼쪽이 더 크다면 오른쪽 인덱스 번호 감소시킨다.