Python: Code Taka 2주차 5

dev-swd·2020년 11월 15일
0

Code Taka

목록 보기
10/12

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. 배열의 값 1과 8이 왔을 때 결국 물을 담을 수 있는 면적은 1*1이 된다.
  2. 두 수의 값 중 작은 값이 height 가 되고, 두번째 숫자의 인덱스 값 - 첫번 째 숫자의 인덱스 값이 width 값이 된다.
  3. 이렇게 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 

(솔루션 분석 중...)

profile
개발을 취미로 할 수 있는 그 때 까지

0개의 댓글