(Python, Java) 프로그래머스 - 약수의 개수와 덧셈

[문제 링크]

Python 풀이1

import math


def divisorCount(x):
    count = 0
    end = (int)(math.sqrt(x))
    for i in range(1, end + 1):
        if x % i == 0 and i ** 2 == x:
            count += 1
        elif x % i == 0:
            count += 2
    return count


def solution(left, right):
    answer = 0

    for i in range(left, right + 1):
        if divisorCount(i) % 2 == 0:
            answer += i
        else:
            answer -= i
    return answer

Python 풀이2

다른 사람이 푼 풀이 중에서 신박한게 있어서 가져와봤다.
루트를 씌운 값이 정수로 딱 떨어지면 해당 수는 약수의 개수가 홀수라는 근거에서 나온 풀이 같다.

import math


def solution(left, right):
    answer = 0
    for i in range(left, right + 1):
        if int(math.sqrt(i)) == math.sqrt(i):
            answer -= i
        else:
            answer += i
    return answer

Java 풀이

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

        for (int target = left; target <= right; target++) {
            // 약수의 개수가 홀수인 경우는 제곱근인 경우 뿐이 없다.
            if (target % Math.sqrt(target) == 0) {
                answer -= target;
            } else {
                answer += target;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.solution(13, 17));
    }

}

© 2021. By Backtony