[CodeKata]2

김예진·2020년 10월 18일
0
  • 문제
    인자인 height는 숫자로 이루어진 배열입니다.그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다. 아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.

    저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
    [가정] 배열의 길이는 2이상입니다.

1) 왓?

처음에는 어떻게 풀어야하는지 감도 오지 않았다. 와... 오늘 문제도 못 풀겠구나 싶어서 천장만 쳐다보다가 완벽하게 코드까지 쓰지는 못해도 접근이라도 해보자는 생각으로 다시 천천히 봤다. 2주차 짝꿍님과 함께... 천천히...접근...

2) 면적의 길이 = 가로 x 세로

면적의 길이를 구하는 공식은 가로 곱하기 세로다.
세로는 배열이 가진 값이고, 가로는 배열 갯수 -1이라고 생각했다.

3) 가장 넓은 면적을 구하는 방법

이 부분이 제일 고민이 많이 됐다. 가로 곱하기 세로인건 알겠는데.. 가장 넓은 면적의 길이를 어떻게 접근할 수 있을지 생각나지 않았었다. 새로운 배열.. 리스트를 만들어서 첫번째 인덱스부터 마지막까지 인덱스까지 모든 면적들을 다 리스트 안에 넣어준 뒤에 제일 큰 값을 리턴하도록 하면 될 것 같았다.

4) 코드

def get_max_area(height):
  result = []
  for i in range(0,len(height)):
    for j in range(i+1, len(height)):
      if height[i] < height[j] :
        result.append(height[i] * (j-i))
      else : 
        result.append(height[j] * (j-i))
      
  return max(result) 
  • result 라는 빈 리스트 생성
  • i번째 인덱스와 j번째 인덱스에서 최소값을 높이로 가져야하므로 height[i] < height[j] 일때는 height[i]와 (j-i)를 곱하고 그렇지 않을 때는 반대로.
  • max 메소드를 사용해서 리스트 안에서 제일 큰 값을 반환
profile
Backend Developer 🌱 벨로그 내용을 티스토리로 이사중~!

0개의 댓글