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

최준호·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;
}

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

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

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글