코딩테스트

[프로그래머스] 약수의 개수와 덧셈 제곱근방식

mhui123 2025. 4. 4. 15:41
반응형

문제

주어진 정수 left ~ right까지의 모든 수들의 약수의 갯수를 구하고, 약수의 갯수가 짝수면 answer 에 더하고 홀수면 answer에서 뺀 최종 결과값을 구하시오.

접근

제곱근 방식을 사용해 반복 횟수를 최소화하여 작업하도록 작성함.

우선 각 숫자별 약수의 갯수를 구한 후, 갯수에 따라 answer에서 증감시킨다.

public static int solution(int left, int right) {
        List<Integer> factors = new ArrayList<>();
        List<Integer> numbers = new ArrayList<>();

        int answer = 0;
        //각 숫자별 약수의 갯수 구하기 제곱근 방식
        for(int i = left; i <= right; i ++){
            int cnt = 0;
            for(int j = 1; j <= Math.sqrt(i); j ++){
                if (i % j == 0) {
                    cnt ++;
                    if( j != i / j) {
                        cnt ++;
                    }
                }
            }
            factors.add(cnt);
            numbers.add(i);
        }

        for(int i = 0 ; i < factors.size(); i++){
            if( factors.get(i) % 2 == 0) {
                answer += numbers.get(i);
            } else {
                answer -= numbers.get(i);
            }
        }

        return answer;
    }
반응형