Codekata 2-5

go286·2021년 1월 10일
0

문제

인자인 height는 숫자로 이루어진 배열입니다.
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고,
물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.

가정

풀이

function getMaxArea(height) {

  let result = 0;
  let h = 0;
  for(let i=0; i<height.length; i++){
    for(let j=i+1; j<height.length; j++){
      if(height[i] > height[j]){
        h = height[j];
      }else{
        h = height[i];
      }
      // const h = height[i] > height[j] ? height[j] : height[i];
      // Math.min(height[i], height[j]);
      const area = (j - i) * h; 
      if(result < area){
        result = area;
      }
    }
  }
  return result;
}

중첩 for문을 돌려서 막대기의 높이 값을 if문으로 비교후에 더 작은 값을 h에 넣어주고 사각형의 넓이는 가로 × 높이 니깐 area = ( j - i ) × h;로 정의해준다. 그 후에 area 값이 result 값 보다 크면 result에 area 값을 넣어주고 return result를 해준다.

  • 높이 값을 구해줄 때 if문으로 비교해줄수도 있지만 삼항연산자나 Math.min() 메서드를 써서 구해줄 수도 있다.

0개의 댓글