약수의 개수와 덧셈(월간 코드 챌린지 시즌2)

권 해·2023년 2월 7일

Algorithm

목록 보기
8/49

문제

코드

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        double num;
        for(;left<=right;left++){
            num=Math.sqrt(left);
            num=num-(int)num;
            if(num>0)
                answer+=left;
            else
                answer-=left;
            
        }
        return answer;
    }
}

풀이

처음에는 약수의 개수를 하나하나 구해야 하나 생각했는데, 좋은 방법이 떠올라서 간단하게 해결할 수 있었다.
사실 약수가 홀수가 되는 경우는, 주어진 수가 거듭제곱 인 경우밖에 없었다. 거듭제곱인 수를 판별하는 방법은, Math.sqrt 함수를 사용한 결과가 정수인지 확인하는 것이다. 정수가 아니라면, 거듭제곱이 아닌 것이기 때문이다.

거듭제곱인 수는 약수의 개수가 홀수이기 때문에 빼주었고, 거듭제곱이 아닌 수는 약수의 개수가 짝수이기 때문에 더해주었다.

결과

출처 : 프로그래머스 코딩 테스트 연습 https://school.programmers.co.kr/learn/challenges

0개의 댓글