getMaxArea 함수

Luluzoe·2021년 10월 30일
0
post-thumbnail

문제

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

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

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

<가정>
배열의 길이는 2이상입니다.

어떻게 접근할 것 인가?

이 문제를 보자마자 코드카타 첫 번째 문제가 생각났다. 2중 for문을 써서 순차적으로 접근하기.
물을 담는다고 할 때는 두 개의 그래프 중 낮은 그래프 만큼만 담을 수 있다.
즉, 두 개의 그래프의 index값의 차이로 가로를 구하고, 두 그래프 중 낮은 그래프를 높이로 정하자.

나의 코드

let area = []
  
for (let i = 0; i < height.length; i++) {
    let first = height[i]
    
for (let j = i + 1; j < height.length; j++) {
    let second = height[j]

      if (first >= second) {
        area.push(second * (j - i))
      } else if (first < second) {
        area.push(first * (j - i))
      }
    }
  }
  const maxValue = Math.max(...area);
  return maxValue
}

빈 배열을 만들어서 각 면적의 값을 넣어주고, 그 중 가장 큰 값을 추출하자.
첫 번째 for문을 이용해 first라는 변수에 첫 번째 그래프(높이)를 할당해주자.
두 번째 for문을 이용해 second라는 변수에 두 번째 그래프(높이)를 할당해주자.

second가 짧을 경우 secondx가로길이를 구해 area 배열에 넣어준다. 반대의 경우도 area배열에 넣어주자.
물이 담기는 높이는 낮은 그래프까지 담긴다.
마지막으로 Math.max()를 이용해 최대값을 추출 하면된다.

마무리

예전에 풀었던 문제에서의 접근방식을 잘 기억해서 이번 문제에 이용할 수 있었다. 배열의 요소들에 순차적으로 접근할 때 썼던 2중 for문으로 각 그래프의 높이를 구할 수 있었고, 낮은 그래프까지 물이 담긴다는 것을 캐치하였다.
풀었던 문제에서 썼던 함수를 잘 기억하자!

0개의 댓글