문제
내 풀이
function getDevisor(num) {
let answer = []
for(let i = 1; i < Number.parseInt(Math.sqrt(num)) + 1; i++){
if(num % i === 0) answer.push([i, Number.parseInt(num / i)]);
}
return answer
}
function solution(brown, yellow) {
var answer = [];
const devisors = getDevisor(yellow);
for(let devisor of devisors){
let row = devisor[0];
let column = devisor[1];
let sum = (row + 2) * 2 + (column * 2);
if (sum === brown) answer = [column + 2, row + 2];
}
return answer;
}
- getDevisor : 입력받은 노란색 격자 수(yellow)의 약수를 구한다. 노란색 격자의 (가로 x 세로)가 될 수 있는 모든 경우를 구하기 위함이다. 이때, 시간 단축을 위해 1부터 N의 제곱근 까지의 수만 0으로 나누어 떨어지는지 확인하도록 했다.
- yellow가 12라면 getDevisor의 결과는 [[1, 12], [2, 6], [3, 4]]
- 모든 노란색 격자의 (가로 x 세로)의 경우를 순회하면서 구해지는 갈색 격자의 개수와 입력받은 갈색 격자 수(brown)와 비교한다.이때, 값이 같다면 노란색 격자의 (가로 x 세로)를 사용해서 전체 카펫의 크기를 구할 수 있다.
- 특정 (가로 x 세로)에 대해 갈색 격자의 수는 다음과 같이 구할 수 있다: (세로 + 2) x 2 + (가로 x 2)