본문 바로가기
기초다지기/JS 코딩테스트

javaScript 2차원 배열중 큰 수 구하기

by 김빵그 2023. 11. 9.

문제

2차원 배열 sizes가 매개변수로 주어지고, 모든 크기를 수납할 수 있는 가장 작은 지갑을 만들 때 지갑의 크기를 return 하여라 최소 직사각형 구하기

나의 풀이 

function solution(sizes) {
    var answer = 0;
    var arr = sizes.map(subArr => subArr.slice().sort((a, b) => a - b));
    var maxFirstNumber = Math.max(...arr.map(subArr => subArr[0]));
    var maxSecondNumber = Math.max(...arr.map(subArr => subArr[1]));
    return maxFirstNumber * maxSecondNumber;
}
  • arr 배열 생성 
    • sizes 배열의 정렬
  • maxFirstNumber, maxSecondNumber 계산
    • Math.max를 사용하여 arr 배열 중 첫번째와 두번째 숫자 중 가장 큰 값을 저장 
  • 계산식

리팩토링

function solution(sizes) {
    const sortedSizes = sizes.map(subArr => subArr.slice().sort((a, b) => a - b));

    const maxNumbers = sortedSizes.reduce((max, subArr) => {
        max[0] = Math.max(max[0], subArr[0]);
        max[1] = Math.max(max[1], subArr[1]);
        return max;
    }, [0, 0]);

    return maxNumbers[0] * maxNumbers[1];
}

다른 풀이

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;
}
  • 배열구조분해
    • [hor, ver] 구문을 사용하여 배열 분해를 수행, 각각 최대가로크기와 최대 세로크기 할당
  • reduce
    • 각 하위배열 [a,b]를 반복하며 가로 세로 크기를 계산
    • 초기값 [0,0] h,v 변수 초기화 
function solution(sizes) {
    const rotated = sizes.map(([w, h]) => w < h ? [h, w] : [w, h]);

    let maxSize = [0, 0];
    rotated.forEach(([w, h]) => {
        if (w > maxSize[0]) maxSize[0] = w;
        if (h > maxSize[1]) maxSize[1] = h;
    })
    return maxSize[0]*maxSize[1];
}