본문 바로가기

■ 프로그래밍/알고리즘

[JS] 가장 넓은 면적 구하기

[ 문제 ] 가장 넓은 면적 구하기

더보기

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

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

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

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

 

[ 풀이 ]

2020.04.17

처음에는 제일 높은 수가 다른 것을 대체하는 식으로 접근했는데, 그러면 인덱스의 값에 따라 면적이 뒤집힐 수 있기 때문에 다른 방법을 생각했다. 

0번째에서 1번째, 0번째에서 2번째 height와 인덱스 차이값을 구해 면적 구하는 식을 짜봤더니 다른 것은 두개의 인덱스 값이다. 따라서 for문을 중첩으로 두어, 첫번째 i에는 0번째부터 마지막-1번째 까지, 두번째 j에는 1번째부터 마지막 값까지 두어 for문을 돌렸다. 

function getMaxArea(height) {
  var width = [];
  var smallHeight = 0;
  var maxarea = [];
  
  for (var i=0; i<height.length-1; i++) { // 첫 번째 인덱스 값
    // console.log(i)
    for (var j=1; j<height.length; j++) { // 두 번째 인덱스 값
      if (height[i] <= height[j]) { // i번째와 j번째의 높이를 비교하여 더 작은 값을 smallHeight에 저장
        smallHeight = height[i]
        width = j-i; // 두 개의 인덱스 차이값으로 width 저장하기
      } else {
        smallHeight = height[j]
        width = j-i;
      }
      maxarea.push(smallHeight * width); // 모든 area를 maxarea에 저장하기 
    }
  }
  // console.log(maxarea)
  return Math.max.apply(null, maxarea); // 저장한 값 중 가장 큰 값 return하기
}

var height = [1, 8, 6, 2, 5, 4, 8, 3, 7];
getMaxArea(height);

 

'■ 프로그래밍 > 알고리즘' 카테고리의 다른 글

[JS] Is this a triangle?  (0) 2020.11.07
[JS] Isograms  (0) 2020.11.06
[JS] 특정 수가 나오는 index 찾기  (0) 2020.04.07
[JS] 문자의 첫번째 위치 반환하기  (0) 2020.04.05
[JS] 가장 긴 단어 찾기  (0) 2020.04.04