[프로그래머스 | Javascript] 약수의 합

박기영·2022년 9월 12일
0

프로그래머스

목록 보기
20/126

solution

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 객체로 중복을 제거할 필요가 없어지므로 코드가 간결해진다.
필자가 너무 꼬아서 생각한 것 같다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글