문제 풀기/JavaScripts

문제 44. (중요)최소직사각형(2중 배열 reduce)

kagan-draca 2024. 7. 29. 14:33

 

문제를 보고 반복문을 사용하지 않는 방법이 생각나지 않았다...

그래서 반복문을 사용하더라도 간단하고, 수행시간이 빠른 코드를 작성하고 싶었다.

 

먼저, 

 

sizes.map((array)=> array.sort((a, b)=> b - a)

로 width와 height 중 큰 값을 무조건 

width에 오게 만들었다.

 

그 후, let w = size[0][0], h = size[0][1]

로 가로, 세로 길이를 저장한 후

 

반복문으로 순회해 가로, 세로에서 큰 값을 갱신했다.

 

function solution(sizes) 
{
    sizes = sizes.map((array)=> array.sort((a, b)=> b - a))
    console.log(sizes)
    let w = sizes[0][0], h = sizes[0][1]
    for(let i = 1; i < sizes.length; i++)
    {
        w = sizes[i][0] > w ? sizes[i][0] : w;
        h = sizes[i][1] > h ? sizes[i][1] : h;
    }
    return w * h;
}

 

테스트를 다 통과한 후, 다른 사람들의 코드를 분석한 결과

반복문 없이 문제를 해결할 수 있었다.

 

sizes.reduce()의 매개변수로 acc(누산값), cur(현재값)이 있는데

이때, acc와 cur에 배열 형식의 매개변수를 주는 방식이었다.

 

acc = [w, h], cur = [a, b], 초기 누산값 = [0, 0]

 

이렇게 acc와 cur을 주면,

a는 width가 되고, b는 height가 된다.

 

Math.max(w, Math.max(a,b)),

Math.max(h, Math.min(a,b))

 

가로는 카드의 가로, 세로 중 큰 녀석을

현재 가장 큰 가로와 비교해

w(acc[0])에 저장하게 될 것이고,

 

세로는 카드의 가로, 세로 중 작은 녀석을

현재 가장 큰 세로와 비교해

h(acc[1])에 저장하게 될 것이다.

 

제출한 코드 :

 

function solution(sizes) 
{
    [wid, hei] = sizes.reduce(([w, h],[a, b])=> [Math.max(w, Math.max(a,b)), Math.max(h, Math.min(a,b))],[0,0])
    return wid * hei
}