[TIL #22 WECODE] Code Kata

Whoyoung90·2021년 3월 12일
0
post-thumbnail

210312 WECODE #21 Code Kata

문제

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

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

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

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

나의 답변

function getMaxArea(height) {
let arr = [];
for( let i=0; i<height.length; i++){
  for( let j=i+1; j<height.length; j++){
    if( height[i] <= height[j] ){
      arr.push( height[i]*(j-i) ); 
    }
    else{
      arr.push( height[j]*(j-i) );
    }
   }
  }
  return Math.max(...arr) // area.sort((a,b) => b-a); return area[0];
 }
getMaxArea( [1, 8, 6, 2, 5, 4, 8, 3, 7]);
  • 가로길이는 배열 index간의 간격으로 구현
  • 세로길이는 높은것a와 낮은것b가 만나면 물이 b만큼 채워지고
    낮은것a와 높은것b가 만나면 물이 a만큼 채워진다!
  • 빈배열 arr을 새로 선언하고,
    가로길이를 구현하기 위해 변수 i, j에 이중 for문을 돌린다
  • height[i] <= height[j] 일때 채워지는 높이는 height[i]
    height[i] > height[j]일때 채워지는 높이는 height[j]
    height[i or j]*(j-i) 가로*세로로 면적을 구하여 배열arr에 넣어준다(push)
  • for문으로 나온 수많은 배열값들중 가장 큰수를 구하면 되는데

이때 방법이 두가지가 있다.

  • Math.max(...arr) 스프레드 연산자(Spread Operator)
    (Math.max('1', '2')에 들어가는 인자는 정수로만 들어가기 때문에 배열 전체를 넣으려면? 스프레드 연산자를 이용)
  • area.sort((a,b) => b-a); return area[0]; sort함수의 내림차순
    배열을 내림차순으로 재배열하면 첫번째 인자[0]가 최댓값!!!
profile
비전공으로 일식 쉐프가 되었듯, 배움에 겸손한 프론트엔드 개발자가 되겠습니다 :)

0개의 댓글