본문 바로가기
혼자 공부하는 것들/알고리즘

[JS] 프로그래머스 약수의 개수와 덧셈

by applepick 2021. 10. 21.
반응형

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

function solution(left, right) {
    var answer = 0;
    let arr = [];
    let arr1 =[];
    for(let i =left;i<=right;i++){
        arr.push(k(i));
        arr1.push(i);
    }
    for(let i=0;i<arr.length;i++){
        if(arr[i]%2 === 0){
            answer+=arr1[i];
        }else{
            answer-=arr1[i];
        }
    }
    return answer;
    
}
function k(n){
    let cnt = 0; 
    for (let i = 1; i * i <= n; i++) { 
        if (n % i == 0) { 
            cnt++; 
            if (i * i < n) cnt++;
        } 
    }
    return cnt;
}

array에 범위의 숫자를 정의하고 약수를 구하는 함수를 따로 구현한 뒤 약수가 짝수이면 answer에 더하고 홀수이면 빼주었습니다. 약수의 개수를 구하는 것을 조금 더 효율적으로 풀기 위해 수의 범위를 해당 숫자의 반으로 했습니다. 

 

+풀이 방법 추가

 

제곱근이 정수이면 약수의 개수가 홀수인 것으로 푸신분이 있네요 대박!!!!

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

 

반응형

댓글