알고리즘/코드카타

Week2 - Day5 (Javascript)

시럽이 2022. 7. 15. 18:48

💬 코드카타 2주차에서 구글링이나 다른 사람의 도움을 받지 않고 처음으로 짝궁과 고민하여 푼 첫 코드카타... 짝궁이랑 흥분감에 손 떨며 test 결과를 기다렸고... 결과는 성공‼✌🏻

 

 

문제

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

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

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

 

가정

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

 

 

내 Flow

  1. height 배열의 요소는 높이를, 인덱스는 가로 길이를 나타내므로 더블 for문을 돌려 각각의 값을 비교한다.
  2. 같은 인덱스를 비교하지 않도록 if문을 설정한다.
  3. 비교했을 때 더 낮은 높이를 기준으로 가로길이와 곱해 면적을 구한다.
  4. 이 때 음수가 나와 0보다 큰 수가 나오도록 if문을 설정해서 새로운 배열로 만들어준다.
  5. 위 로직을 끝내고 새 배열에서 가장 큰 수(가장 넓은 면적의 값)을 return한다.

 

풀이

function getMaxArea(height) {
  let area = 0;
  let arr = [];
  let max = 0;
  
  for (let i=0; i<height.length; i++) {
    for (let j=0; j<height.length; j++ ) {
      if(i!=j){
        if (height[i]<height[j]) {
          area = (j-i)*height[i];
        } else {
          area = (j-i)*height[j];
        }

        if(area>0){
          arr.push(area)
        }
      }
    }
  }
  for(let k in arr){
    if(max < arr[k]){
      max = arr[k]
    }
  }
  return max;
}

 

 

 

짝궁이 줄인 풀이

function getMaxArea(height) {
  let area = 0;
  let arr = [];
  
  for (let i in height) {
    for (let j in height) {
      //(조건문) ? true : false
      height[i]<height[j] ? area = (j-i)*height[i] : area = (j-i)*height[j];
      //if(조건문) ? (실행문) : null 일 때, (조건문) && (실행문)
      area > 0 && arr.push(area);
    }
  }
  return Math.max(...arr);
}

'알고리즘 > 코드카타' 카테고리의 다른 글

Week3 - Day4 (Javascript)  (0) 2022.07.23
Week3 - Day1 (Javascript)  (0) 2022.07.19
Week2 - Day4 (Javascript)  (0) 2022.07.15
Week2 - Day3 (Javascript)  (0) 2022.07.14
Week2 - Day2 (Javascript)  (0) 2022.07.14