[CodeKata] 10. get_max_area

그냥·2022년 6월 19일
0

CodeKata

목록 보기
9/18
post-thumbnail

제목

인자인 height는 숫자로 이루어진 배열이다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있다.

아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 이다.

저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해라.


풀이

  1. 문제의 조건 정리
1) 양의 정수로 이루어진 배열을 인자로 받는다.
2) 배열에 들어있는 숫자는 y축의 값이다.
3) 양의 정수의 값을 반환한다.
4) 반환값은 물을 담을 수 있는 가장 넓은 면적의 값이다.

  1. 조건에 대한 코드 구현 방법 생각
1) 배열을 for문으로 돌면서 위치에 따른 넓이의 값을 리스트에 저장한다.
2) 가장 큰 값을 max(리스트)를 통해서 뽑아낸다.
3) 넓이는 for문을 돌면서 높이가 가장 작은 것을 기준으로 측정할 수 있다.

  1. 코드 구현
def get_max_area(height):
  results = []
  
  for i in range(len(height)):
    for j in range(len(height)):
      min_height = min(height[i], height[j])
      max_width = abs(j-i)
      results.append(min_height * max_width)
  
  return max(results)

  1. 코드 리뷰
1) 이중 for문을 돌려서 현재의 값과 그 다음 값을 비교한다(높이, 길이 둘 다)
2) 길이는 이중 for문을 돌면서 음수가 나올 수 있으므로 abs() 절대값 함수를 사용해서 길이를 뽑아낸다.
3) 모든 넓이의 값을 list에 저장하고 그 중 가장 큰 값을 뽑아내서 반환한다.

  1. 최고의 코드
def get_max_area(height):
  a = []
  for x1,y1 in enumerate(height[:-1]):
    for x2, y2 in enumerate(height[1:]):
      a.append((x2 + 1 - x1) * min(y1,y2))
      
  return max(a)

0개의 댓글