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

백승연·2024년 1월 11일
0
post-thumbnail

🗒️ 문제

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.


제한 사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

nreturn
1228
56

입출력 예 설명

입출력 예 #1

  • 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2

  • 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

🖋️ 나의 풀이

function solution(n) {
    let result = [];

    for (let i = 0; i <= n; i++) {
        if (n % i === 0) result.push(i);
        else if (n == 0) return 0;
    }
    return result.reduce((a, b) => a + b);
}

💡 다른 사람들의 풀이

# 1

배열 사용하지 않고 푸는 방법

function solution(num) {
    let sum = 0;
    for (let i = 1; i <= num; i++) {
        if (num % i === 0) sum += i
    }
    return sum
}

# 2

가독성 떨어지지만 신기해서 가져옴

function solution(n, a=0, b=0) {
    return n <= a / 2 ? b : solution (n, a + 1, b += n % a ? 0 : a);
}

# 3

계산량을 줄이기 위해 n까지 다 안하고, 아래 짝을 찾으면 위아래를 같이 더해봤습니다. 예를들어 12면, 3을 찾앗을때 3+4를 해주는 방식으로.

라는 작성자의 코멘트가 있어서 가져와봄

function solution(n) {
    var answer = 0;
    let i;
    for (i = 1; i <= Math.sqrt(n); i++){
        if (!(n%i)) {
            answer += (i+n/i);
        }
    }
    i--;
    return (i === n/i) ? answer-i : answer;
}



📝 모르는 내용 찾아보기

profile
공부하는 벨로그

0개의 댓글