인자인 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++) {
arr.push(Math.min(height[i], height[j]) * (j - i));
}
}
return arr.sort((a, b) => b - a)[0];
}
우선 빈 배열을 선언하고 중첩루프를 통해 모든 경우의 수를 다 배열에 넣을 수 있게 했다. 모든 원소를 돌며 height[i]
와 height[j]
두개의 값 중 작은값과 x축의 길이값 (j - i)을 곱한 뒤, 빈 배열에 넣어준다.
그 후 내림차순으로 정렬하고 0번째 인덱스를 반환하면 끝이다.
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;
}
중첩 루프를 통해 해결하는 것은 나와 같지만, Math.max를 사용해 바로 변수에 가장 넓은 너빗값을 저장하고 반환해 코드의 가독성을 높혔다.
🤷♂️