카테고리 없음

[알고리즘] 최소직사각형 javascript

ShinBW 2022. 1. 18. 20:07

문제설명

문제설명2

예시

입출력 예시

문제풀이

이번문제는 글이 하도 많아서 시작하는데 한참헤맸다.
집중이 잘 안돼..

사실for문 말고는 감이 전혀 안왔다.

function solution(sizes) {
    let w = []; // 가로 선언
    let h = []; // 세로 선언

    for(let i=0; i<sizes.length; i++){  // for문으로 첫번째 배열의값을 구해주고 그 안에서 값을 비교해서 가로배열 / 세로 배열로 push해준다
      if(sizes[i][0] > sizes[i][1] ){ 
        // console.log(sizes[i][0]) // 60, 60, 80 
        // console.log(sizes[i][1]) // 50, 30, 40,
          w.push(sizes[i][0])  // 푸쉬는 배열에 추가ㅏㅏㅏ
          h.push(sizes[i][1])
      }else{
          w.push(sizes[i][1])
          h.push(sizes[i][0])
      }
    }// 리듀스로 가로 배열중 최고값 찾기 if문 사용 
     let maxW = w.reduce( (acc ,cur) => acc > cur ? acc : cur);  //80
     let maxH = h.reduce( (acc ,cur) => acc > cur ? acc : cur); //50

    return maxW * maxH // 최고 가로 값 * 최고 세로값 

}

solution([[60, 50], [30, 70], [60, 30], [80, 40]])

고수분들의 풀이

function solution(sizes) {
    const [hor, ver] = sizes.reduce(([h, v], [a, b]) => [Math.max(h, Math.max(a, b)), Math.max(v, Math.min(a, b))], [0, 0])
    return hor * ver;
}

Math.max 함수는 숫자 집합중에 가장 큰 수를 리턴하는 함수이며,

Math.min 함수는 숫자 집합중에서 가장 작은 수를 리턴하는 함수입니다.

이문제는 그밖에도 forEach for of 등등 다양한 반복문과 함수들을 사용해 푼 문제로 확인되며 각각의 풀이법을 파헤쳐봐야겠다.