알고리즘/프로그래머스

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

BaGyun 2022. 7. 29. 20:09
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

function solution(left, right) {
    var answer = 0;
    let arr = []
    for(i=left; i<=right; i++){
        arr.push(i)
    }
    for(j=0; j<arr.length; j++){
        answer += divisors(arr[j])
    }
    return answer;
}

function divisors(integer) {
    let result = 0;
    let count = 0;
    for(var i=1; i<=integer; i++) {
        if (integer % i === 0) {
            count++
    }
}
    if(count % 2 === 0){
       result = integer
    } else {
       result = -integer
    }
    return result
}

약수의 개수를 구해주는 함수를 따로 만들고, 그 함수에서 홀수개와 짝수개를 구한다음 들어간 값을 반환해주는 식으로 적었는데 참 어렵게도 푼 거 같다.

베스트 풀이

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;
}

베스트 풀이를 봤는데 진짜 간단하게 푼걸보고 약간의 허탈감과 신기했다.

제곱근이 정수면 약수의 개수가 홀수다