시나리오
언휴네 집에는 직육면체 구조의 수영장이 있어요.
외부에서 보면 수영장 있는 곳에 여러 개의 기둥이 보여요.
이 중에 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))