code-kata(Week2 - Day5)(TIL)

이해용·2022년 5월 20일
0
post-thumbnail

문제

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

아래의 그래프라면 height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] 입니다.

저 그래프에 물을 담는다고 생각하고, 물을 담을 수 있는 가장 넓은 면적의 값을 반환해주세요.

가정

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

https://storage.googleapis.com/replit/images/1555380144403_97221ca23fbb92beaae5b6c800ceb5c8.pn

풀기 전 나의 생각

먼저 가로의 길이와 세로의 길이를 모두 구하면 면적을 구할 수 있다는 생각이 들었고 그 면적을 모두 비교하여 제일 높은 값이 나오게 하면 될거라 생각했으나 구현이 잘되지 않았다.

풀이

  1. 변경하기 위한 값 0을 선언한다.
  2. 이중 for 문을 사용하여 x축과 y축의 값을 구한 식을 설정한다.
  3. 높이가 낮은 쪽으로 면적을 구해야하므로 최소 값을 구하는 식을 사용한다.
  4. 낮은 높이를 먼저 구하고 x축의 값을 곱하여 최대 값을 구하는 식을 사용한다.

결과

function getMaxArea(height) {
    let area = 0;    
    for (let i = 0; i < height.length; i++) {
        for (let j = i+1; j < height.length; j++) {
            area = Math.max(Math.min(height[i], height[j]) * (j-i), area);
        }
    }    
    return area;
}

Math.max()와 Math.min() 사용 시 2개의 인자 결과 값?

Math.max(), Math.min() 사용시 괄호() 안에서 (a, b) 가 있다면 두 값을 비교하여 더 높은 수 또는 더 낮은 수를 출력하는 method이다.

ex)

Math.max(5, 10) // 10
Math.min(5, 10) // 5

참고 및 출처
https://velog.io/@hyounglee/CodeKata-10

profile
프론트엔드 개발자입니다.

0개의 댓글