TIL63. CodeKata : 물 최대면적 구하기 문제

ID짱재·2021년 10월 29일
0

CodeKata

목록 보기
8/18
post-thumbnail

🌈 물 최대면적 구하기 문제


🤔 나의 Solution

인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다. 아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 이기 때문에 최대면적은 49입니다. 저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 구하는 함수를 작성해주세요.

def get_max_area(height):
  areas = set()
  for i in range(len(height)-1):
    for j in range(i+1, len(height)):
      temp_height = min(height[i], height[j]) # 👈 두개의 높이값 중 작은것을 선택해야 물이 넘치치 않는다.
      temp_width = abs(i-j) # 👈 음수가 나오지 않게 abs로 처리
      area = temp_width * temp_height
      areas.add(area)
  return max(areas)
height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
print(get_max_area(height))

✔️ 이중 for문으로 i,j값으 가지고 높이와, 넓이를 구할 수 있기 떄문에 이를 모두 구해 셋에 add했다.

✔️ 나올 수 있는 모든 면적은 아래와 같다. 이 중 가장 큰 값을 반환하면 된다.

i: 0 j: 1 일 때, temp_height: 1 temp_width: 1 area: 1
i: 0 j: 2 일 때, temp_height: 1 temp_width: 2 area: 2
i: 0 j: 3 일 때, temp_height: 1 temp_width: 3 area: 3
i: 0 j: 4 일 때, temp_height: 1 temp_width: 4 area: 4
i: 0 j: 5 일 때, temp_height: 1 temp_width: 5 area: 5
i: 0 j: 6 일 때, temp_height: 1 temp_width: 6 area: 6
i: 0 j: 7 일 때, temp_height: 1 temp_width: 7 area: 7
i: 0 j: 8 일 때, temp_height: 1 temp_width: 8 area: 8
i: 1 j: 2 일 때, temp_height: 6 temp_width: 1 area: 6
i: 1 j: 3 일 때, temp_height: 2 temp_width: 2 area: 4
i: 1 j: 4 일 때, temp_height: 5 temp_width: 3 area: 15
i: 1 j: 5 일 때, temp_height: 4 temp_width: 4 area: 16
i: 1 j: 6 일 때, temp_height: 8 temp_width: 5 area: 40
i: 1 j: 7 일 때, temp_height: 3 temp_width: 6 area: 18
i: 1 j: 8 일 때, temp_height: 7 temp_width: 7 area: 49
i: 2 j: 3 일 때, temp_height: 2 temp_width: 1 area: 2
i: 2 j: 4 일 때, temp_height: 5 temp_width: 2 area: 10
i: 2 j: 5 일 때, temp_height: 4 temp_width: 3 area: 12
i: 2 j: 6 일 때, temp_height: 6 temp_width: 4 area: 24
i: 2 j: 7 일 때, temp_height: 3 temp_width: 5 area: 15
i: 2 j: 8 일 때, temp_height: 6 temp_width: 6 area: 36
i: 3 j: 4 일 때, temp_height: 2 temp_width: 1 area: 2
i: 3 j: 5 일 때, temp_height: 2 temp_width: 2 area: 4
i: 3 j: 6 일 때, temp_height: 2 temp_width: 3 area: 6
i: 3 j: 7 일 때, temp_height: 2 temp_width: 4 area: 8
i: 3 j: 8 일 때, temp_height: 2 temp_width: 5 area: 10
i: 4 j: 5 일 때, temp_height: 4 temp_width: 1 area: 4
i: 4 j: 6 일 때, temp_height: 5 temp_width: 2 area: 10
i: 4 j: 7 일 때, temp_height: 3 temp_width: 3 area: 9
i: 4 j: 8 일 때, temp_height: 5 temp_width: 4 area: 20
i: 5 j: 6 일 때, temp_height: 4 temp_width: 1 area: 4
i: 5 j: 7 일 때, temp_height: 3 temp_width: 2 area: 6
i: 5 j: 8 일 때, temp_height: 4 temp_width: 3 area: 12
i: 6 j: 7 일 때, temp_height: 3 temp_width: 1 area: 3
i: 6 j: 8 일 때, temp_height: 7 temp_width: 2 area: 14
i: 7 j: 8 일 때, temp_height: 3 temp_width: 1 area: 3

✔️ 물의 높이를 구하기 위해 현재 i,j 위치에 있는 height의 값 중 작은 값을 선택했다. 물이 넘치지 않아야 하기 때문이다.

✔️ 물의 넓이를 구하기 위해 abs함수로 음수가 나오지 않게 한다. 높이와 너비를 구햇다면 이를 곱해서 계속 set에 추가시킨다.

profile
Keep Going, Keep Coding!

0개의 댓글