인자인 height는 숫자로 이루어진 배열입니다. 그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
가정
배열의 길이는 2이상입니다.
const height= [1, 8, 6, 2, 5, 4, 8, 3, 7] function getMaxArea(height) { let size = 0; for (let i = 0; i<height.length; i++) { for(let j= i+1; j<height.length; j++) { const waterSize = (Math.min(height[i], height[j]) * (j-i) ); if(size < waterSize) { size = waterSize }; } } return size; } getMaxArea(height)
처음에는 그래프로 문제를 이해하려해서 문제의 본질을 보기에 더 어려웠다.
이 문제의 배열의 요소들 중 2개의 값을 설정하고, 기준이 되는 값와 나머지 값 사이의 면적이 가장 큰 값을 반환하면 되는 것이다.
- ⭐우선 기준 값, 나머지 값을 차례로 꺼내야하기 때문에 각각 i와 j로 설정하여
이중 for문
을 돌려주었다.for (let i = 0; i<height.length; i++) { for(let j= i+1; j<height.length; j++) { } }
- ⭐기준값과 나머지 값 사이의 면적에 대한 식을 세워 변수에 넣어주었다.
const waterSize = (Math.min(height[i], height[j]) * (j-i) );
-
height
: Math.min(height[i], height[j])
-width
: (j-i)
=>면적
= (Math.min(height[i], height[j]) * (j-i))
두 값 중 작은 값(물이 담기려면 가장 작은값까지 담기기 때문에
- ⭐for문 밖에서
size=0
이라는 변수 설정
- i와 j에 따른 면적이 초기 설정한 size 값보다 크면 해당 값을 size에 넣어주면서 최종적으로 최대 면적을 구해주기 위해- ⭐i값과 j값이 설정되었을 때 면적을 계산하고,
size
<
largeSize
일 때 밖의 변수인 size를 largeSize로 바꿔주어 최종적으로 가장 큰 면적이 largesize로 반환되도록if문
적용const waterSize = (Math.min(height[i], height[j]) * (j-i) ); if(size < waterSize) { size = waterSize };
최소 최대값 반환 | |
---|---|
Math.min( ) | 주어진 숫자들 중 가장 작은 값 반환 |
Math.max( ) | 주어진 숫자들 중 가장 큰 값 반환 |