TIL _ Code Kata _ 그래프 면적의 최댓값 구하기

❓문제

  • 숫자로 이루어진 배열을 받았을 때, 배열 내 각 요소의 순서가 x축의 값이고 요소 값이 y축의 높이를 이루는 그래프를 상정
  • 예를 들어, [1, 8, 6, 2, 5, 4, 8, 3, 7] 라는 배열을 인자를 받을 경우 그래프는 아래와 같이 형성
  • 해당 그래프에 물을 담는다고 가정할 때, 물을 담을 수 있는 가장 넓은 면적의 값을 반환
function getMaxArea (height) { };


1. 해결 방안

  • 사고 과정

🔓 (문제 파악) 물이 담기는 면적을 계산해야한다.
🔑 (해결 방안)

  • 물이 담기는 면적 =
    (뒷 요소의 인덱스 - 앞 요소의 인덱스)(가로) * 두 요소 값 중 작은 값(세로)
    (물은 낮은 높이까지만 담길 수 있으므로 두 요소 값 중 작은 값을 사용)




🔓 (문제 파악) 물이 담기는 면적 중 최대값을 구해야 한다.
🔑 (해결 방안)

  1. 배열 내 모든 조합 가능한 두 요소로 면적을 구한다.
    1-1. for문 중첩을 통해 두 개의 요소를 순회한다.
    1-2. 가로(j-i)와 세로(height[i]height[j] 중 더 작은 값)를 곱하여 면적을 구하고, 이를 새로운 배열에 할당한다.
  2. 모든 계산 가능한 면적 중 최대값을 반환한다. (Math.max() 메소드 활용)
function moreThanHalf(nums) {
  let newArr = [];
  for (i = 0; i < height.length; i++) {
    for (j = i + 1; j < height.length; j++) {
      height[j] > height[i]
        ? newArr.push((j - i) * height[i])
        : newArr.push((j - i) * height[j]);
    }
  }
  // j(뒷 요소) 인덱스는 항상 i(앞 요소) 인덱스보다 한 요소 뒤에서 반복을 시작한다(j = i + 1)
  return Math.max(...newArr);
}



2. 결과





"작성 내용 중 오류나 오타가 있다면, 댓글로 알려주시면 감사하겠습니다. 주니어 개발자에게 남겨주시는 작은 피드백이 큰 도움이 될 것 같습니다. 고맙습니다 :)"

좋은 웹페이지 즐겨찾기