
인자인 height는 숫자로 이루어진 배열입니다.
그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.
상단 이미지는 배열 [1, 8, 6, 2, 5, 4, 8, 3, 7]을 받았을 때를 상정한 그래프 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.
function getMaxArea(height) {
result = 0
copyHeight = height
let compObj = {};
for (var i = 0; i < height.length; i++) {
compObj[i] = copyHeight[i];
}
let compVals = Object.values(compObj)
for (var i = compVals.length; i >= 0; i--) {
for (var j = compVals.length - 1; j >= 0; j--) {
width = i - j
height = compVals[i] >= compVals[j] ? compVals[j] : compVals[i]
if (width > 0 && width * height > result) {
result = width * height
}
}
}
return result
}
머리가 안좋아서 매우 멍청하게 객체로 만들어서 풀었다.
배열만으로도 결과 도출이 가능했을 것 같은데, 풀은 내가 봐도 왜 이렇게 풀었는지 이해가 안될 지경이다.
아마 이전에 작성한 코드를 재활용하고 싶었던 것이리라.
일단, height의 값을 객체의 key와 value로 저장한 후,
values의 길이를 구한다. 그리고 반복문으로 전체탐색을 하는데,
돌때마다 가로길이와 세로길이의 최댓값을 찾아내 부피의 최대값을 갱신해준다.
솔직히 이건 개못짰네 ㄹㅇㅋㅋ
인정합니다.