Algorithm/Programmers

Programmers / Level 1 / 약수의 개수와 덧셈

Gyuri 2022. 5. 28. 15:49

[문제설명]

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

[제한사항]

1 ≤ left ≤ right ≤ 1,000

[입출력 예]

 

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        
        for(int i=left; i<=right; i++) { // left부터 right까지의 모든 수들 중
            int num = 0; // 약수의 개수
            
            for(int j=1; j<=i; j++) { 
                if(i%j==0) { 
                    num++;
                }
            }
            
            if(num % 2 == 0) { // 약수의 개수 짝수인 경우
                answer+=i; // 해당 숫자 더함
            } 
            else { // 약수의 개수 홀수인 경우
                answer-=i; // 해당 숫자 뺌
            }

        }
        
        return answer;
    }
}

약수의 개수를 구해 짝수인 경우엔 해당 숫자를 더해주고, 아닌 경우엔 빼줘야 하므로 약수의 개수 변수 num을 생성했다.

약수의 개수를 어떻게 구하면 좋을 지 생각해보다가, 1부터 구하려는 숫자 까지(i) for 루프를 돌며 나눴을 때 0이 되는 경우에만 num에 1을 더해주는 방법을 사용했다. 

 

약수의 개수 구하는 방법이 한 번에 떠오르지 않았지만, 생각해내고 나니 쉽게 풀 수 있었던 문제였다.