코딩테스트/Programmers

[Programmers] 약수의 개수와 덧셈

주니어주니 2023. 8. 14. 15:16

 

 

 

 

* 내 풀이 

class Solution {
    public int solution(int left, int right) {
        int sum = 0;
        for(int i=left; i<=right; i++) {
            int count = getMeasure(i);
            sum = (count % 2 == 0) ? sum + i : sum - i;
        }
        return sum;
    }

    public int getMeasure(int num) {
        int cnt = 0;
        for(int i=1; i<=num; i++) {
            if (num % i == 0) cnt++;
        }
        return cnt;
    }
}

 

 

* 다른사람 풀이

class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        for (int i=left;i<=right;i++) {
            //제곱수인 경우 약수의 개수가 홀수
            if (i % Math.sqrt(i) == 0) {
                answer -= i;
            }
            //제곱수가 아닌 경우 약수의 개수가 짝수
            else {
                answer += i;
            }
        }

        return answer;
    }
}

 

Math.sqrt() : 제곱근(square root) 구하는 함수 (double형 반환)

 

Math.sqrt(i) : i의 제곱근

 

i가 i의 제곱근으로 나누어 떨어지면 => i의 제곱근이 i의 약수이면 -> 약수의 개수가 홀수