알고리즘

[Algorithm] 약수의 합

TrueSik 2022. 9. 23. 00:07

문제

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

 

예제

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

 

풀이

function solution(n) {
    let sum = 0;
    
    for (let i = 1; i <= n; i++) { 
        if (n % i === 0) {
            sum += i
        }
    }
    
    return sum
}

 

다른 풀이

// 1 번
function solution(n, a=0, b=0) {
    return n<=a/2?b:solution(n,a+1,b+=n%a?0:a);
}

// 2 번
function solution(n) {
	return n==0?0:Array(n).fill(1).map((x,y)=>x+y).filter(a=>n%a!=0?0:a).reduce((c,d)=>c+d)
}

// 3 번
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;
}

3번 풀이 방식은 계산량을 줄이기 위해 n까지 다 안 하고, 아래 짝을 찾으면 위아래를 같이 더한다고 합니다.

예를 들어 12면, 3을 찾았을 때 3+4를 해주는 방법입니다.

 

출처 

https://school.programmers.co.kr/learn/courses/30/lessons/12928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr