<코드타카 2 주차 05.>

강민수·2021년 12월 19일
0

Day 5


함수는 인자로서 숫자로 이루어진 height를 받으며 각 인덱스는 높이를 나타낸다. 보다 이해하기 쉽게 아래 그래프를 보자

height배열의 인덱스값에 따라 순차적으로 높이가 정해지고 두개의 인덱스 사이에 있는 공간에 물을 담을 수 있다. 사진의 빨간 인덱스값을 보자. 각각 높이가 8과 7이다. 이 사이에 담을 수 있는 물의 양은 너비와 높이 값을 곱해서 계산할 수 있는데 너비값은 7, 높이값은 높이 8만큼 물을 채우면 7인 부분에서 물이 흘러 넘칠테니 7로 계산한다. 여기서 너비와 높이를 곱하면(7*7) 49가 나오게 된다. 이러한 방식으로 계산되는 물을 담을 수 있는 공간의 경우의 수들 중에 가장 큰 숫자를 구하면 된다.

let array1 = [1, 8, 6, 2, 5, 4, 8, 3, 7];

function getMaxArea(height) {
  let maxArea = 0;
  for(let i=0; i<height.length-1; i++){
    for(let j=i+1; j<height.length; j++){
      if(height[j]<height[i]){
        if((j-i)*height[j] > maxArea){
          maxArea = (j-i)*height[j];
        }
      }
      else{
        if((j-i)*height[i] > maxArea){
          maxArea = (j-i)*height[i];
        }
      } 
    }
  }return maxArea;
}
console.log(getMaxArea(array1));

접근방법

  1. 물을 담을 수 있는 가장 넓은 면적 값을 저장하기 위한 변수 maxArea를 선언해준다. 우리는 밑에서 반복문을 돌려서 각 인덱스 값에 따른 면적을 계산하고 비교해가면서 더 큰 값을 maxArea에 넣어줄 것이다.
  2. 첫번째 반복문 for(let i=0; i<height.length-1; i++)은 너비의 시작 값, 두번째 반복문 for(let j=i+1; j<height.length; j++)은 너비의 끝 값으로 i와 j를 곱하면 물을 담을 수 있는 면적을 계산할 수 있다.
  3. if문으로 height[j]와 height[i]의 크기를 비교, 보다 작은 값을 높이로 사용하며 안에서 if문을 한번 더 선언하여 계산된 면적이 maxArea보다 크다면 maxArea값을 계산된 면적값으로 초기화해준다.
  4. for문이 다 돌고나면 maxArea에는 면적값의 경우의 수들 중 가장 큰 값이 남게 되므로 maxArea를 return해주면 물을 담을 수 있는 면적의 최대값이 리턴된다.

풀이 2.

function getMaxArea(height) {
let a = []
  for(let i = 0 ; i < height.length-1 ; i++) {
    for(let j = i+1 ; j< height.length; j++){
      a.push((height[i]>height[j] ? height[j] : height[i]) * Math.abs(i-j)  )
    }
  }
return a.sort((a,b)=> b-a)[0]
}
profile
개발도 예능처럼 재미지게~

0개의 댓글