최대 면적 구하기 – 수영장 물 채우기 [코딩 테스트 Python]

시나리오

언휴네 집에는 직육면체 구조의 수영장이 있어요.

외부에서 보면 수영장 있는 곳에 여러 개의 기둥이 보여요.

이 중에 2개의 기둥은 실제 수영자의 양쪽 끝 부분이랍니다.

언휴가 얘기하길 수영장에 물을 가장 많이 채울 수 있는 두 개의 기둥이 수영장 양쪽에 있는 기둥이라고 하네요.

코딩 테스트 - 최대로 물 채우기
코딩 테스트 – 최대로 물 보관

민수는 언휴네 수영장의 실제 양쪽 기둥이 무엇인지 알아내기 위한 알고리즘을 생각해 보았어요.

두 개의 기둥에서 높이가 낮은 기둥까지 물을 채울 수 있다는 것은 생각하였는데 나머지 부분을 여러분이 도와주세요.

문제

난이도: 2 (easy) [1:very easy, 2:easy, 3:middle, 4: difficult, 5: very difficult]

입력: [3, 6, 3, 7, 2, 4, 2]

출력: 16

설명

왼쪽 기둥이 낮을 때 최대 면적은 1번 기둥과 6번 기둥일 때 입니다. (15)

오른쪽 기둥이 낮을 때 최대 면적은 6번 기동과 2번 기둥일 때 입니다.(16)

따라서 최대 면적은 16입니다.

코드

def GetMaxArea(harr):

harr = [3,6,3,7,2,4,2]
print(GetMaxArea(harr))

솔루션

def GetMaxArea(harr):
    max=0
    length = len(harr)
    for i in range(0,length):
        height = harr[i]     
        width = 0   
        for j in range(length-1,i,-1):            
            if (height<=harr[j]):
                width = j-i
                break
        if max<width*height:
            max = width*height
    for i in range(length-1,0,-1):
        height = harr[i]
        width = 0
        for j in range(0,i):            
            if (height<=harr[j]):
                width = i-j
                break
           
        if max<width*height:
            max = width*height
    return max

harr = [3,6,3,7,2,4,2]
print(GetMaxArea(harr))