[프로그래머스 lev1/JS] 약수의 합

woolee의 기록보관소·2022년 10월 22일
0

알고리즘 문제풀이

목록 보기
3/178

문제 출처

프로그래머스 lev1 - 약수의 합

문제 요약

정수 n의 약수를 모두 더한 값 반환하기 (0 <= n <= 3000)

나의 풀이

기본 for 반복문 풀이(1~n) - 나머지가 0이면 약수.

function solution(n) {
    var answer = 0;
    for (let i=1; i<=n; i++) {
        if (n%i===0) answer += i; 
    }
    return answer;
}

n의 약수는 본인을 제외하고 n/2보다 클 수 없으니 1~n이 아닌 1~n/2까지 확인

function solution(n) {
    var answer = 0;
    for (let i=1; i<=n/2; i++) {
        if (n%i===0) answer += i; 
    } 
    return answer+n;
}

다른 풀이

const getDivisors = (num) => {
    const divisors = [];
    for(let i = 1 ; i <= num/2 ; i++){
        if(num % i === 0) divisors.push(i);
    }
    return [...divisors, num];
}
출처: https://mine-it-record.tistory.com/522 [나만의 기록들:티스토리]

제곱근(Math.sqrt()를 메서드 사용)까지만 for 반복문 순회하기. 대신 나눠서 나오는 값 역시 약수이므로 같이 더해줘야 한다.

const getDivisors = (num) => {
    const divisors = [];
    for(let i = 1 ; i <= Math.sqrt(num) ; i++){
        if(num % i === 0) {
            divisors.push(i);
            if(num / i != i) divisors.push(num / i);
        }
    }
    
    // divisors.sort((a, b) => a - b);
    return divisors;
}
출처: https://mine-it-record.tistory.com/522 [나만의 기록들:티스토리]
profile
https://medium.com/@wooleejaan

0개의 댓글