
내 풀이
1부터 n까지의 정수를 for문으로 돌며 n으로 나누어떨어지는지 확인 후,
나누어떨어지면 answer에 더해서 총합을 구한다.function solution(n) { var answer = 0; for (let i=1; i<=n; i++) { if(n % i ===0) { answer+=i } } return answer; }
다른 풀이
계산량을 줄이기 위해 n의 제곱근까지의 정수 중에 n으로 나누어떨어진다면 해당 정수와 해당 정수의 짝꿍인 정수까지 한번에 더해주는 로직
function solution(n) { var answer = 0; let i; for (i = 1; i <= Math.sqrt(n); i++){ if (!(n%i)) { answer += (i+n/i); } } i--; /* for문의 마지막 반복에서 i++를 통해 i의 수가 1 증가하므로 이를 원래대로 돌리기 위해 다시 1을 빼준다.*/ // return (i === n/i) ? answer-i : answer; /* 만약 정수 i와 i의 짝궁수가 같다면, 똑같은 수가 중복해서 총합에 더해지므로 총합에서 i를 한번 뺀다. ex) n이 25라면 n의 약수 1, 5, 25 중에서 1의 짝꿍은 25이지만 5의 짝궁은 자기자신인 5이므로 같은 수가 한번 더 총합에 더해지게 된다.(=1+ 5 + 5 + 25 ) 따라서 총합에서 자기자신을 한번 더 빼야한다. */ }