Programmers | #Lv1 "약수의 합"

블로그 이사 완료·2022년 9월 18일
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) {
    var answer = [];
    for(let i=0; i<=n; i++){
        if(n%i===0){
            answer.push(i);
        }
    }
    var sum = answer.reduce((a,b) => a + b, 0);
    return sum;
}

다른 풀이

function solution(num) {
    let sum = 0;
    for (let i = 1; i <= num; i++) {
        if (num % i === 0) sum += i
    }
    return sum
}
function solution(n, a=0, b=0) {
    return n<=a/2?b:solution(n,a+1,b+=n%a?0:a);
}

Review

약수를 구해서 모든 약수의 합을 구하는 문제였다.

약수는 어떤 자연수를 나누어떨어지게 하는 수이다.
어떤 수의 약수에는 1과 자기 자신이 항상 포함된다.

자연수를 나누어 떨어지게 하는 조건은 어떤 수로 나누었을 때 나머지가 0이 되면 된다.

빈 배열을 만들고, for문을 돌려 주어진 입력 값 보다 작은 수를 한 개 씩 증가 시켜 입력 값의 약수를 빈 배열에 push()로 배열에 추가한다.

그리고 배열의 모든 값을 각각 더해서 반환했다.

다른 사람의 풀이를 봤는데 굳이 배열을 사용하지 않고 숫자로만 계산해서 반환하는 방법도 있었다.


profile
https://kyledev.tistory.com/

0개의 댓글