CK 025 | Week2 - Day5

This Is Empty.·2021년 10월 1일
0

codekata

목록 보기
25/35

문제

인자인 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

물을 담을 수 있는 최대 넓이를 구하는 것이므로
높이를 양쪽 끝에서 부터 비교를 해야한다. 높이는 둘 중 더 낮은것이 높이이고, 밑 변은 오른쪽 인덱스 번호 - 왼쪽 인덱스 번호 이다.

위 사진을 예로 들면,
높이는 왼쪽이 더 높지만 오른쪽은 왼쪽에 비해 높이가 낮다. 오른쪽을 넘어서는 높이로 물을 담을 수는 없기때문에
왼쪽과 오른쪽중 최솟값을 물을 담을 수 있는 높이로 지정한다.

오른쪽과 왼쪽이 만나지 않을때 까지 최대 넓이를 구한다.

이때 오른쪽의 높이가 왼쪽의 높이보다 크다면 왼쪽 인덱스 번호를 증가시키고, 왼쪽이 더 크다면 오른쪽 인덱스 번호 감소시킨다.

profile
Convinced myself, I seek not to convince.

0개의 댓글