문제 설명
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수n
이 매개변수로 주어질 때 두 숫자의 곱이n
인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.
문제의 제목은 순서쌍의 개수이지만, 생각해보면 이 문제는 그냥 약수의 개수를 구하는 것과 같다. 그래서 어떻게 하면 약수를 구할 수 있을까 생각해보았고, 약수는 어떤 자연수를 나누어 떨어지게 하는 수라는 것을 중점적으로 생각하여 코드를 작성했다.
function solution(n) {
const divisor = [];
for (let i = 1; i <= n; i ++) {
if (n % i === 0) {
divisor.push(i)
}
}
return divisor.length;
}
function solution(n) {
let ans = 0;
for (let i = 1; i < Math.sqrt(n); i++)
if (n%i === 0) ans+=2;
return Number.isInteger(Math.sqrt(n)) ? ans+1 : ans;
}
입출력 예 #1에서 n
은 20이었고, 20의 제곱근은 자연수가 아니므로 짝수가 답이었다. 반면 #2에서 n
은 100이었고, 100의 제곱근은 자연수이므로 홀수가 답이 되었다. 이는 (10, 10) 순서쌍의 경우의 수를 생각한 것이므로 마지막 return Number.isInteger(Math.sqrt(n)) ? ans+1 : ans
이 이해되었다. 또한 n
을 제곱근까지만 순회한 것 또한 어차피 순서쌍은 (a, b)와 (b, a)가 반복되기 때문에 배열 순회의 양을 줄이고 2씩 더하는 방법을 택한 것이 창의적이라고 생각했다.