IT/Algorithm

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

프티 2021. 10. 20. 19:16
반응형

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

 

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

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

programmers.co.kr

 

나의 풀이

function isOddOrEven(num) {
    let divisorCount = 0;
    
    for (let i = 1; i <= num; i++) {
        if (!(num % i)) {
            divisorCount += 1;
        }
    }
    
    return !(divisorCount % 2) ? true : false;
}

function solution(left, right) {
    let answer = 0;
    
    for (let i = left; i <= right; i++) {
        if (isOddOrEven(i)) {
            answer += i;
            continue;
        }
        
        answer -= i;
    }
    
    return answer;
}

약수의 개수가 홀수인지 짝수인지 판별하는 함수를 따로 만들었다.

솔루션 함수에서는 홀수인지 짝수인지에 따라 더하고 빼도록 하고 정답을 반환하도록 하였다.

 

 

다른 사람의 풀이

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

이분은 함수를 따로 만드는 대신 제곱근을 사용하였다.

예를 들어 제곱수인 36은 6 x 6처럼 같은 숫자의 제곱으로 될 수 있기 때문에 약수가 홀수이다.

 

이 성질을 활용하겠다는 생각은 하지 못했는데 대단하다..!

 

확실히 수학적인 이론을 사용하는 것이 코드의 길이를 크게 줄여줄 수 있는 것 같다.

반응형