⭐️ Memory/교육수강 회고
[CodeKata] getMaxArea 함수 구현하기
개발자 올라프
2022. 5. 22. 17:02
문제
인자인 height
는 숫자로 이루어진 배열이다. 그래프로 생각한다면 y축의 값이고, 높이 값을 가지고 있다.
아래의 그래프라면 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++){
size = Math.max(Math.min(height[i], height[j]) * (j-i), size);
}
}
return size;
}
물을 담을 수 있는 가장 넓은 면적을 반환하는 size
는 물이 넘치면 안되므로 Math.min(height[i], height[j])
를 사용하여 낮은 높이를 구하고 j-i
값을 곱하는 과정을 반복하여 가장 큰 값이 나오는 것을 비교하여 size
에 담는다.
핵심은 각각의 높이를 비교하여 물이 넘치지 않을 낮은 높이를 찾는 것과 그 둘 사이의 거리를 곱했을 때 가장 큰 값을 찾아내는 것이 아닐까 싶은 문제였다.