프로그래머스 약수의 개수와 덧셈

최준호·2021년 7월 16일
0

algorithm

목록 보기
16/39

문제

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

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력 예

풀이

public class Divisor {
    public static void main(String[] args) {
        int left = 13;
        int right = 17;
        Divisor d = new Divisor();
        int solution = d.solution(left, right);
        System.out.println("solution = " + solution);
    }
    public int solution(int left, int right) {
        int answer = 0;

        //left와 right의 약수가 총 몇개인지 return 해주는 메서드로 체크
        for(int i=left; i<=right; i++){
            int divisor = find(i);
            if(divisor%2 == 0 && divisor != 1){
                answer += i;
            }else{
                answer -= i;
            }
        }

        return answer;
    }

    private int find(int key){
        int res = 0;
        for(int i=1; i<=key; i++){
            if(key%i==0) res++;
        }
        return res;
    }
}

이번 문제도 쉬운 편이다 약수를 구하는 공식만 안다면 금방 끝낼 수 있다. 약수를 구하는 공식은 위에 내가 사용한 find method처럼 체크할 수도 있지만

private int find(int key){
    int res = 0;
    for(int i=1 ; i<=Math.sqrt(key); i++) {
        if( key % i == 0 ) {
            res ++;
            if(key/i != i) res++;
        }
    }
    return res;
}

다음과 같이 제곱근을 활용해서 푸는 방식인데 이 방법은 더 공부해봐야겠다. 그리고 이 방법은 갯수만 구할 수 있는 방식이니 다른 문제에서는 이 방법을 커스텀해서 사용해야할 것이다. 인터넷에 검색하면 많이 나오니까 화이팅

약수를 구하는 공식을 정리 해놓자!

0개의 댓글

관련 채용 정보