code-taka 09(get_max_area)

nichol·2022년 5월 22일
0

Algorithm & DataStructure

목록 보기
9/12

문제

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

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

풀이

풀이1 : 모든 면적의 경우의 수를 다 구해서 가장 큰 수를 반환한다.

def get_max_area(height):
   l1 = []
    for i in range(len(height)):
        for j in range(i+1, len(height)):
            if height[j] > height[i]:
                a = (j-i) * height[i]
                l1.append(a)
            else:
                a = (j-i) * height[j]
                l1.append(a)
    return max(l1)      
  • 문제는 이중for문을 사용했고 list comprehension을 사용한다고 해도 결국은 이중for문이다

풀이2 : 이중for문 해결 (코드 출처)

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 
  • while문을 돌면서 문제에서 작은막대 기준으로 면적을 구해야된다는 것을 min함수를 이용했고,
    그 값중 가장큰값만 필요하니 그것을 max함수를 이용했다.
  • 그리고 그뒤에 조건문을 통해 하나씩 줄여가며 비교를 진행, 결과값을 반환했다.
profile
WEB Developer

0개의 댓글