function solution(n) {
let ans = [];
for(let i = 1; i <= n; i++){
if(n % i === 0){
// 나눈 숫자
ans.push(i);
// 몫
ans.push(n / i);
}
}
// 중복 제거
let set = Array.from(new Set(ans));
let sum = set.reduce((acc, curr) => {
return acc + curr;
}, 0);
return sum;
}
단순하다.
주어진 숫자 n을 1부터 n까지 증가하는 i로 나눈다.
나누어 떨어진다면, 그 때의 i와 몫이 약수이므로 ans 배열에 넣는다.
여기서 고려해야할 것은 중복되는 값들이 생긴다는 것이다.
예를들어 n이 12라고 하면 3과 4가 ans에 들어간 후, 4와 3이 또 ans에 들어가는 문제가 생긴다.
필자는 그냥 이 값들을 처리하지 않고, 그대로 ans에 넣은 후
Set 객체를 통해 중복값을 제거했다.
function solution(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) sum += i
}
return sum
}
필자의 풀이보다 훨씬 간단하다.
몫과 i를 ans 배열에 저장했던 것과 달리, 여기서는 i만을 구해서 바로 sum에 더해줬다.
이러면 Set 객체로 중복을 제거할 필요가 없어지므로 코드가 간결해진다.
필자가 너무 꼬아서 생각한 것 같다.