[Programmers] 77884. 약수의 개수와 덧셈

new Dean( );·2021년 8월 31일
0

알고리즘

목록 보기
25/30

문제

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

풀이

제곱수인 경우(ex. 4, 25, ...) 약수의 개수가 홀수개이다.
따라서 isYakeven() 함수에서 Math.sqrt를 이용해 int로 제곱근을 얻는다. 이를 다시 제곱해서 주어진 수와 일치하면 false(홀수개를 의미)를 리턴하고, 일치하지 않으면 true(짝수개)를 리턴한다.

자바코드

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for (int i=left; i<=right; i++) {
            if (isYakeven(i)) answer += i;
            else answer -= i;
        }
        return answer;
    }
    
    public boolean isYakeven(int num) {
        
        int sq = (int)Math.sqrt(num);
        if (sq*sq == num) return false;
        else return true;
    }
}

막힌 부분

error: incompatible types: possible lossy conversion from double to int
        int sq = Math.sqrt(num);

Math.sqrt() 의 입력값과 반환값은 모두 double이다 ^^..

public static double sqrt(double a)

-> int sq = (int)Math.sqrt(num); 로 해결

0개의 댓글