JS-algorithm/프로그래머스

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

yunieyunie 2022. 6. 21. 15:38

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

 

코딩테스트 연습 - 약수의 개수와 덧셈

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

programmers.co.kr

 

해결방법

1. i에 left를 담고 i는 right까지 1씩 증가시킨다

2. 1부터 i까지의 수로 i를 나눴을 때 나눈 나머지가 0이면 약수의 개수 divisor를 1씩 증가시킨다

3. divisor가 짝수면 sum에 더하고 홀수면 뺀다

 

풀이

function solution(left, right) {
    var answer = 0;
    
    for (let i = left; i <= right; i++ ){
        let divisor = 0;
        
        for (let j = 1; j <= i; j++ ){
            if (i % j === 0) divisor++;
        }
        (divisor % 2 === 0) ? sum += i : sum -= i;
    }
    return answer;
}

 

 

배운 점

1. 제곱근이 정수면 약수의 개수는 홀수다

제곱근이 정수면 약수의 개수가 홀수라는 성질을 이용한 다른 분의 풀이를 발견했다

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

i에 left부터 right까지 담는데 Number.isInteger를 이용해 i의 제곱근 즉, Math.squr(i)이 정수인지를 판별한다

정수라면 약수의 개수가 홀수이기 때문에 i를 빼주고 아니라면 짝수이기 때문에 더해주는 것이다

 

실제로 입출력 예1에서 13부터 17까지 중 제곱근이 정수인 16만 약수의 개수가 홀수이다

입출력 예2에서도 24부터 27까지 중 제곱근이 정수인 25만 약수의 개수가 홀수임을 알 수 있다