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

urzi·2022년 3월 21일
0

PS

목록 보기
2/36

문제

https://programmers.co.kr/learn/courses/30/lessons/77884

풀이

두 수의 사이의 숫자들(두 수 포함)의 약수의 개수를 각각 구하고 조건에 맞게 덧셈과 뺄셈을 해준다.

코드

public int solution(int left, int right) {
        int answer = 0;

        for (int i = left; i <= right; i++) {
            int divisor = divisor(i);
            if (divisor % 2 == 0) {
                answer += i;
            } else {
                answer -= i;
            }
        }

        return answer;
    }

	// 약수 구하는 함수
    private int divisor(int N) {

		/**
         * N의 약수 중 하나가 m이라고 했을 때 다른 약수는 N/m이다.
         * 따라서 루트 N까지 구하면 약수 절반의 개수를 알 수 있다.
         * 절반의 개수를 구하고 거기에 2를 곱해주자.
         * 루트 N이 i와 같으면 제곱근 이므로 1개로 카운트 하자.
         * 제곱근: 제곱해서 나온 값이 N과 같은 경우
         */
        int count = 0;
        for (int i = 1; i * i <= N; i++) {
            if (i * i == N) count++;
            else if (N % i == 0) count += 2;
        }

        return count;
    }
profile
Back-end Developer

0개의 댓글