[Algorithm] 배열 그래프에서 가장 넓은 면적 구하기

김진영·2022년 8월 26일
0

Algorithm

목록 보기
4/15
post-thumbnail

📋 배열 그래프에서 가장 넓은 면적 구하기

인자인 height는 숫자로 이루어진 배열입니다. 그래프로 생각한다면 y축의 값이고, 높이 값을 갖고 있습니다.

아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.
저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.

가정
배열의 길이는 2이상입니다.


📌 1. 나의 풀이

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번째 인덱스를 반환하면 끝이다.


📌 2. 모범 답안

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를 사용해 바로 변수에 가장 넓은 너빗값을 저장하고 반환해 코드의 가독성을 높혔다.

1개의 댓글

comment-user-thumbnail
2022년 8월 26일

🤷‍♂️

답글 달기