정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
n은 0 이상 3000이하인 정수입니다.
n | return |
---|---|
12 | 28 |
5 | 6 |
입출력 예 #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);
}
약수를 구해서 모든 약수의 합을 구하는 문제였다.
약수는 어떤 자연수를 나누어떨어지게 하는 수이다.
어떤 수의 약수에는 1과 자기 자신이 항상 포함된다.
자연수를 나누어 떨어지게 하는 조건은 어떤 수로 나누었을 때 나머지가 0이 되면 된다.
빈 배열을 만들고, for문을 돌려 주어진 입력 값 보다 작은 수를 한 개 씩 증가 시켜 입력 값의 약수를 빈 배열에 push()
로 배열에 추가한다.
그리고 배열의 모든 값을 각각 더해서 반환했다.
다른 사람의 풀이를 봤는데 굳이 배열을 사용하지 않고 숫자로만 계산해서 반환하는 방법도 있었다.