정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
n | return |
---|---|
12 | 28 |
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);
}
배열 사용하지 않고 푸는 방법
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);
}
계산량을 줄이기 위해 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;
}