[알고리즘] 약수의 개수와 덧셈


알고리즘 문제 풀이 : 약수의 개수와 덧셈

알고리즘 문제 풀이 : 약수의 개수와 덧셈

문제

<문제 설명>
두 정수 left와 right가 매개변수로 주어집니다. 
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 
약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
<제한사항>
1 ≤ left ≤ right ≤ 1,000
<입출력 예>
leftrightresult
131743
242752
<입출력 예 설명>
입출력 예 #1
다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수	약수	약수의 개수
13	1, 13	2
14	1, 2, 7, 14	4
15	1, 3, 5, 15	4
16	1, 2, 4, 8, 16	5
17	1, 17	2
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2
다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수	약수	약수의 개수
24	1, 2, 3, 4, 6, 8, 12, 24	8
25	1, 5, 25	3
26	1, 2, 13, 26	4
27	1, 3, 9, 27	4
따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

나의 풀이

function solution(left, right) {
    let answer = 0;    
    
    // 1 <= left <= right <= 1000
    for(let i = left; i <= right; i++) {
        
        let idx = 1;
        let temp = [];
        
        // 약수 구하기
        while(idx <= i) {
        
            if(i % idx === 0) {
                temp.push(idx);
            }
            idx += 1;
            
        }
        
        // 약수의 개수가 짝수면 +
        // 약수의 개수가 홀수면 -
        answer = temp.length % 2 === 0 ? answer += i : answer -= i;
        
    }    
    
    return answer;
}

공부하기

  • push() 메서드 push() 메서드는 배열의 끝에 하나 이상의 요소를 추가하고, 배열의 새로운 길이를 반환합니다.
  • Math.sqrt() 함수 Math.sqrt() 함수는 숫자의 제곱근을 반환합니다.
  • Number.isInteger() 메서드 Number.isInteger() 메서드는 주어진 값이 정수인지 판별합니다.

참고






© 2020. GANGPRO. All rights reserved.