[Python] Coda Kata Day10

rang-dev·2020년 6월 22일
0

Wecode - Code Kata

목록 보기
10/18

문제

인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.

저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.

  • 가정
    배열의 길이는 2이상입니다.

내코드

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)

밑변의 길이는 1부터 len(height)-1까지 가능하다. 일단 처음에는 첫 인덱스를 기준으로 밑변을 1씩 늘려가면서(1, 2, 3, ..., len(height)-1) 가능한 모든 넓이를 구한다. 이제 인덱스가 0인 경우에 대한 넓이는 모두 구했으므로 다음 인덱스로 이동하여 위에서 해준 작업을 반복하면 모든 밑변의 경우에 대한 넓이를 구할 수 있으므로 모든 넓이를 구해낼 수 있다.

Model Solution

def get_max_area(height):
	l = 0
	r = len(height) -1
	area = 0
	while l < r: 
		area = max(area, min(height[l],height[r]) * (r - l))
		if height[l] < height[r]: 
			l += 1
		else:
		    r -= 1
	return area 
profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글