본문 바로가기

Java/코딩테스트

[java/프로그래머스/77884] 약수의 개수와 덧셈 (Math.sqrt(i) == 0)

✏️ 문제 설명

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


✏️ code

🖥️ 아쉬운 점: sqrt를 생각하지 못한 것
제곱수인 경우, 약수 개수가 홀수입니다.
if (i % Math.sqrt(i) == 0) {answer -= i;}
else {answer += i;}
class Solution {
    public int solution(int left, int right) {
        int result = 0;
        for (int i = left; i <= right; i++) {
            result += countDivisor(i);
        }
        return result;
    }
    
    private int countDivisor(int n) {
        int count = 0;
        if (n == 1) {
            return -1;
        } else {
            for (int i = 2; i <= n/2; i++) {
                if (n % i == 0) {
                    count++;
                }
            }
            return (count % 2 == 0) ? n : -n;
        }
    }
}
반응형