알고리즘풀이 - [codekata25]

min00young·2020년 11월 15일
0

문제

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

[1, 8, 6, 2, 5, 4, 8, 3, 7] 

입니다.

저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
가정) 배열의 길이는 2이상입니다.

문제풀이

먼저 문제풀이를 위해서 구해야 할것은 면적입니다. 면적을 구하기 위해서는 가로와 세로에 대한 길이를 구해야합니다.

가로의 경우, 조건에서 주어진것은 아니지만, 각 기둥사이의 길이는 1이라고 가정을 한것 같습니다.
세로의 경우, 주어진 조건대로 물을 담는다는것을 가정하면 선택된 각 기둥중에서 작은값을 기준으로 세로(높이)가 결정되는것을 알수있습니다.

배열안의 요소들을 2개씩 뽑아서, 서로의 인덱스번호를 위치로 보고, 가로길이를 구합니다. (음수가 나오는것을 막기위해서 절대값을 이용합니다.)
세로의 경우는 둘중에 작은값을 구하기 위해서 min함수를 이용합니다.

반복문을 통해서 구하게 된 면적들중에서 가장큰값을 리턴하게 되면 문제는 해결됩니다.

코드

def get_max_area(height):

  areas = set()
  
  for i in range(len(height)-1):
    for j in range(i+1, len(height)):
      h = min(height[i], height[j])
      b = abs(i-j)
      area = b * h
      areas.add(area)
  return max(areas)
profile
개발공부를 하면서 배우고 경험하고 앞으로 알아가야할것들에 대해서 정리하고 있습니다 🙂

0개의 댓글