[Python] (문제풀이) 그래프에 물 붓기

이태권 (Taekwon Lee)·2022년 6월 17일
0
post-thumbnail

"물을 붓는 여인" (에두아르 마네, 1858)


(Code Kata 2-5) 그래프에 물 붓기


❓ 문제

문제

인자인 height는 숫자로 이루어진 배열입니다.
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.

아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7]입니다.

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

가정

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


🤔 접근 방식

  • 이중 for 문을 이용하여 폭과 너비를 구한다
    • 폭은 list의 인덱스 값이고, 두 값을 빼서 절대값을 구한다
    • 높이는 list 값 자체이고, 두 값 중 최솟값을 구한다
  • 폭과 너비를 구하여 빈 list에 차례차례 추가한다
  • 채워진 list에서 최댓값을 구한다

❗️ 답안

내 답안

def get_max_area(height):
  area_list = []
  for w1 in range(len(height)):
    for w2 in range(len(height)):
      h1 = height[w1]
      h2 = height[w2]
      area_list.append(abs(w1-w2) * min(h1,h2))
  return max(area_list)

다른 답안

로직은 거의 비슷하지만 코드를 더욱 간결하게 만든 게 차이점이다

def get_max_area(height):
  result = []
  for i in range(len(height)):
      for j in range(i+1, len(height)): 
          result.append((min(height[i],height[j]))*(j-i))
  return max(result)

이건 한 줄로 구현한 건데..
나 같이 초급자가 이해/구현하기에는 아직 어려워 보인다

def get_max_area(height):
   
    return(max([(j-i)*min(height[i], height[j]) for i in range(len(height)) for j in range(i+1,len(height))]))

🔖 참고 자료

profile
(Backend Dev.) One step at a time

0개의 댓글