코딩/코딩테스트

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

이즈99 2024. 5. 17. 16:58
728x90

문제

내가 짠 코드

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

풀이

우선 left 부터 right까지의 모든 합 또는 차를 구해야하므로 for문의 i를 left로 주고 right까지 돌리게 한다. 그후 짝수인지 홀수인지 약수의 갯수를 샐 수 있는 count를 변수로 지정해두고 for문을 하나 더돌려 해당하는 i 의 값의 약수를 구해준다. for문이 끝나면 let count에 약수의 갯수가 나오므로 count % 2 == 0 을 해서 count가 짝수면 + , 홀수면 -를 해주면 된다.

 

다른사람의 풀이

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의 값의 제곱근이 정수면 약수의 갯수가 홀수인 것을 감안해서 만든 코드이다. Math.sqrt(i)는 i의 제곱근을 구하는 것이다. ex) 16의 경우 제곱근이 4이고, 1,2,4,8,16 총 5개의 약수를 가지고있다.