약수의 개수와 덧셈(java)

문제설명

생각하기

  1. left부터 right까지 약수의 개수를 구해가며 반복
  2. 개수가 짝수면 더하고 홀수면 빼자

내 풀이


class Solution {
    public int solution(int left, int right) {
        int ans = 0;
        int cnt =0;
        for(int i=left; i<=right; i++){
            for(int j=1; j<=i; j++){
                if(i% j ==0){
                    cnt++;
                }
            }
            if(cnt % 2==0) ans += i;
            else ans -= i;
            
            cnt=0;
            
        }
        return ans;
    }
}

개수를 세는 변수 cnt를 주어 반복문안에서 약수가 있을 때마다 더해주었다.
cnt의 개수가 짝수면 더하고 홀수면 빼준다.
이후 cnt =0 으로 초기화

개선된 코드

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;
    }
}

제곱수인경우 약수의 개수는 홀수, 제곱수가 아닌 경우 약수의 개수는 짝수
이문제를 접하면서 처음 알게된 사실이다. 기억하고 있으면 다른 문제 풀 때 도움이 될 것같다.

좋은 웹페이지 즐겨찾기