[JavaScript] 프로그래머스 순서쌍의 개수 (약수의 개수 구하기!)

Gaeun·2022년 11월 11일
0
post-custom-banner

순서쌍의 개수

문제 설명
순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (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씩 더하는 방법을 택한 것이 창의적이라고 생각했다.

profile
🌱 새싹 개발자의 고군분투 코딩 일기
post-custom-banner

0개의 댓글