/ PRACTICE

Practice - 약수의 개수와 덧셈

programmers 바로가기

문제

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,

약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

입출력 예

left right return
13 17 43
24 27 52

풀이

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

개선점

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

제곱근이 정수로 떨어지면 약수가 홀수인 점을 이용해서 코딩을 했다

Math 의 메소드 중에 sqrt 는 제곱근을, cbrt 는 세제곱근을 구해준다

그 이상의 수는 pow를 이용해서!

  • Math.pow(2, 1.0/4.0) 이런식으로! 실수형 계산식이 되게 하기 위해서 꼭 이렇게 해줘야함 1/4 안됨