Code Kata Day 10

SYhwang·2023년 2월 12일
0

코드카타

목록 보기
10/10

문제

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

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

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

풀이

function getMaxArea(height) {
  
  let area = [];
  for(i=0; i<height.length; i++) {
    for (j= i+1; j<height.length; j++ ) {
        area.push((j-i) * Math.min(height[i],height[j]))
    }
  }
  return Math.max(...area)
}
  • 발상 : 이중for 문으로 각 height끼리 구할 수 있는 모든 면적의 경우의 수를 구하고, 그 중 가장 큰 값을 반환한다.

  • 처음에는 i=0, j=0으로 시작했는데 콘솔로 출력해보니 불필요한 동일 반복값이 너무 많아진다는 것을 알았다. 반복값을 줄이기 위해 생각하다가 j=0, i=1일 때와 i=0, j=1일 때의 결과는 결국 동일하므로 i 기준으로 j는 i 다음 값부터 시작하면 된다는 것을 깨달았다.
    같은 결과를 출력하는 함수이더라도 들어가는 리소스에 차이가 있고, 리소스의 차이는 결과적으로 성능의 차이를 불러일으킨다. 더 효율적인 방법, 불필요한 연산을 줄이는 방법을 계속해서 고민해야 한다는 것을 느꼈다.

0개의 댓글