본문으로 바로가기

programmers. 약수의 개수와 덧셈

category Algorithm/문제 2021. 6. 14. 17:25

문제

링크

 

코딩테스트 연습 - 약수의 개수와 덧셈

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

programmers.co.kr

풀이

left 부터 right 까지 반복문을 돌리면서 해당 수의 약수의 개수를 확인하고 짝수면 더하기 홀수면 빼기 해주면 된다

코드

    function solution(left, right) {
        var answer = 0;

        for(let i=left; i<=right;i++){
            if(getPrimeCnt(i)%2===0) answer+= i;
            else answer -= i;
        }
        function getPrimeCnt(number){
            let cnt = 0;
            for(let i=1;i<=number;i++){
                if(number%i===0) cnt++;
            }
            return cnt;
        }
        return answer;
    }

리팩토링

기존에 풀었던 코드에서는 number의 약수를 1부터 number까지 다 구하고 짝수 홀수를 판별했는데

제곱수가 아닌 수들은 전부 약수의 개수가 짝수이다 그렇기 때문에 약수를 모두 구할 필요가 없는 것

    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;
    }