
가로가 w 세로가 h인 직사각형 area가 있습니다. w는 h보다 길 수 없으며, 여러 가로, 세로 조합 중 두 값의 차이가 가장 적은 값을 찾아 반환하세요.
제곱근을 활용하면 됩니다. 링크에 작성되어 있듯 제곱근을 구하려면 Math.sqrt()을 활용해야 합니다. area 의 약수 조합인 w,h가 둘 다 제곱근이거나, 더 작은 수인 w가 제곱근보다 작으면서 가장 큰 값일 때 조합을 구해야 합니다.
function solution(area) {
let answer = [];
let divisor = 1;
for (let i = 1; i<=Math.sqrt(area); i++){
if (area % i === 0){
divisor = Math.max(divisor, i);
}
}
answer.push(divisor, area / divisor);
return answer;
}
말 그대로 약수를 구하는 방법입니다. 제곱근에 도달하기 전까지 1부터 하나씩 검사하며 약수를 구하고, 그중 가장 큰 값을 구합니다. divisor, 즉 가로를 구했다면 전체 area에서 나눈 값이 h이므로 두 조합을 구하여 배열로 반환합니다.
function solution(area) {
let width = Math.ceil(Math.sqrt(area));
let height = Math.ceil(area / width);
return [width, height];
};
같은 방식이지만 직접 약수를 구하지 않고 간단하게 구할 수도 있습니다. 제곱근보다 작거나 같아야 하므로, 제곱근을 구한 후 ceil을 통해 내림하면 width가 구해집니다. 따라서 두 조합을 간단히 구할 수 있습니다.