코딩테스트

[JS] 완전탐색 > 최소직사각형

차차한 2022. 8. 23. 13:07

function solution(sizes) {
    
    sizes.map(v => v.sort((a,b) => a-b));
    
    var a = sizes.map((v,i) => sizes[i][0]).sort((a,b)=>b-a);
    var b = sizes.map((v,i) => sizes[i][1]).sort((a,b)=>b-a);
    
    return a[0] * b[0]
}

가로길이 중 가장 큰 수와 세로길이 중 가장 큰 수를 곱하면 되는 문제여서 먼저 sizes를 map으로 돌려 배열의 순서를 오름차순으로 정렬했다.

명함을 돌리면 가로길이가 세로길이가 되고 그 반대도 되기 때문에, 무엇이 가로이고 세로인지는 중요하지 않다

입력값이 저러한 배열일 때 오름차순으로 정렬하면 [ [ 50, 60 ], [ 30, 70 ], [ 30, 60 ], [ 40, 80 ] ] 가 된다.

그 후에 다시 map을 돌려서 0번/1번 인덱스에 있는 값 중 가장 큰 수를 찾기 위해 내림차순으로 배열을 정렬했다.

a배열, b배열의 0번 인덱스에 가장 큰 수가 오게 됐으니 이제 두 수를 곱해서 리턴해주면 끝!