Python: Code Taka 2주차 5
Q. 문제: 인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다. 아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다. 저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
배열의 길이는 2이상입니다.
나의 답
def get_max_area(height):
result = 0
for i in range(len(height)):
for j in range(i + 1, len(height)):
temp = 0
w = j - i
if height[i] <= height[j]:
temp = height[i] * w
else:
temp = height[j] * w
if temp >= result:
result = temp
return result
- 배열의 값 1과 8이 왔을 때 결국 물을 담을 수 있는 면적은 1*1이 된다.
- 두 수의 값 중 작은 값이 height 가 되고, 두번째 숫자의 인덱스 값 - 첫번 째 숫자의 인덱스 값이 width 값이 된다.
- 이렇게 height*width 한 값을 temp 변수에 넣고, 계속 비교해 나가면서 가장 큰 값을 도출해낸다.
느낀 점
for를 두번 쓸 수 밖에 없었던 점이 아쉽다. for 반복문을 1번으로 끝낼 수 있는 규칙과 로직을 생각해내야 겠다.
솔루션
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
(솔루션 분석 중...)
Author And Source
이 문제에 관하여(Python: Code Taka 2주차 5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pm1100tm/Python-Code-Taka-11일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)