WeCode Kata Day 10

luneah·2021년 12월 10일
0

WeCode Kata

목록 보기
10/20
post-thumbnail

문제

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

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

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

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

Thinking Algorithm

  1. 이중 for문 사용
    첫번째 for문은 배열의 첫자리 수부터, 두번째 for문은 배열의 뒷자리 수부터 이동
    ㄴ 배열에서 구해질 수 있는 넓이의 모든 경우의 수 값을 구함
  2. height[i], height[j] 중의 최소값을 구함
    ㄴ 넓이의 높이 값
  3. j-i로 두 수의 인덱스 값을 비교하여 넓이의 가로 길이를 구함
  4. 구해진 넓이의 가로, 세로 길이를 곱해 나온 넓이의 값을 value라는 배열에 push함
  5. sort 함수를 이용하여 각 값들을 큰 수 부터 내림차순으로 정렬
  6. 가장 큰 요소인 첫번째 값을 반환

Code

function getMaxArea(height) {
  let arr = [];

  for(let i=0; i<height.length; i++) {
    for(let j=height.length-1; j>i; j--) {
      arr.push(Math.min(height[i], height[j])*(j-i));
    }
  }
  arr.sort(function(a, b){
    return b-a;
  })
  return arr.shift();
}

다른 풀이 방법

위의 풀이와 같은 원리이나 코드의 길이를 줄여 가독성 높임

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;
}
profile
하늘이의 개발 일기

0개의 댓글