[프로그래머스] 약수의 합(javascript/자바스크립트)

스카치·2023년 2월 3일

내 풀이

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 )
    따라서 총합에서 자기자신을 한번 더 빼야한다. */
}

0개의 댓글