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

woonie·2022년 5월 16일
0

약수의 개수와 덧셈

문제

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

제한사항

  • 1 ≤ left ≤ right ≤ 1,000

입출력

leftrightresult
131743
242752

입출력 예 설명

입출력 예 #1

다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

약수약수의 개수
131,32
141, 2, 7, 144
151, 3, 5, 154
161, 2, 4, 8, 165
171, 172

따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

  • 입출력 예 #2
약수약수의 개수
241, 2, 3, 4, 6, 8, 12, 248
251, 5, 253
261, 2, 13, 264
271, 3, 9, 274

따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

풀이 과정

  1. 이중 반복문으로 left부터, right까지 순회
  2. j를 1부터 i까지 순회하여 i를 j로 나누어 떨어지는 수를 cnt에 증가시켜 홀수개의 약수를 가진 수인지,

    짝수개의 약수를 가진 수인지 구분한다.
class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        //1. left부터 right사이에 있는 모든 수의 약수의 갯수를 구한다

        for (int i = left; i <= right; i++) {
            int divisor_cnt = 0;
            for (int j = 1; j <= i; j++) {
                if (i % j == 0) {
                    divisor_cnt++;
                }
            }
            if (divisor_cnt % 2 == 0) {
                answer += i;
            } else {
                answer -= i;
            }
        }
        //2. 약수는 나누어 떨어지면 카운팅
        //3. 약수의 갯수가 짝수면 더해주고 홀수면 뺴준다

        return answer;
    }
}
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.

0개의 댓글