인자인 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함수의 내림차순