인자인 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에 추가시킨다.