본문 바로가기

TIL

[TIL-132] 위코드 33일차: JS 코드카타

React JS

 

in

개념

 

 


코드 카타

 

y축 값(높이)들을 담은 배열을 받아서 가장 넓은 면적이 나올 때 값 구하기

내 답안

function getMaxArea(height) {
  let maxArea = 0;
  
  for(let i = 0; i < height.length-1; i++) {
    let frontBar = height[i];
    
    for(let j = i+1; j < height.length; j++) {
      let backBar = height[j];
      let area = 0;

      if(frontBar >= backBar) {
        area = backBar*(j-i);
      } else {
        area = frontBar*(j-i);
      }
      
      if(area > maxArea) {
        maxArea = area;
      }
    }
  }

  return maxArea;
}
  • 풀이 방법 : 면적을 형성할 두 막대를 잡아서 면적을 구해보고, 가장 넓은 면적을 찾는다. 짧은 막대의 길이가 높이가 되고, 두 막대의 거리가 너비가 된다.
  • 풀이
    1. y축 값들이 담긴 배열 height를 인자로 받는다.
    2. 가장 넓은 면적의 값을 담을 maxArea 변수를 선언하고 0을 할당하여 값을 초기화한다.
    3. 첫번째 막대가 될 height 배열의 요소를 구하기 위한 인덱스 변수 i값을 제공하는 for문을 시작한다. 두 막대 중 첫번째 막대는 마지막 막대일 수 없기 때문에 i가 가질 수 있는 최댓값은 height 배열의 길이보다 2 작은 값이다.
    4. height에서 i 인덱스 번째 요소(y축 값)를 첫번째 막대의 높이인 frontBar 변수에 할당한다.
    5. i에 대한 for문 안에서(첫번째 막대가 정해진 상태에서) 두번째 막대를 구하기 위해 i보다 최소 1만큼 크고, 최대 height 배열의 길이보다 1 작은 값을 갖는 인덱스 j 변수를 제공하는 for문을 시작한다.
    6. height에서 j 인덱스 번째 요소(y축 값)를 두번째 막대의 높이인 backBar 변수에 할당한다.
    7. 현재 frontBar와 backBar를 가지고 계산할 면적의 값을 저장할 area 변수를 선언하고 임시로 0을 할당해둔다.
    8. if문을 사용해서 frontBar와 backBar 중 작은 값에 j-i(두 막대 간의 거리)를 곱하여 area에 할당한다.
    9. area가 현재의 maxArea보다 크다면 maxArea에 재할당하여 더 큰 값이 저장되게 한다.
    10. for문이 끝난 후 최종적으로 저장된 maxArea를 반환한다.