본문 바로가기
코딩테스트

[프로그래머스 - js / 1단계] 약수의 합

by 럭키봇 2024. 6. 17.
문제

 

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

[제한 조건]
n은 0 이상 3000이하인 정수입니다.

 

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

 

 

 


 

 

 

예시

 

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

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

 

 


 

 

풀이

 

function solution(n) {
    var answer = 0;
    for(var i = 0; i <= n; i++) {
        if (n % i === 0) answer += i;
    }
    return answer;
}

 

1. 0부터 정수 n 까지의 반복문 안에서 정수 n 을 i 로 나누었을때 나머지값이 0 인 값을 answer 변수에 더해준다.

 

 

 

 


 

 

 

다른 사람의 풀이

 

1. 계산량을 줄이기 위해  n 번의 반복문을 돌지 않음, 예를들어 12면, 3을 찾앗을때 3+4를 해주는 방식으로 풀이

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;
}

= Math.sqrt 함수를 사용하여 반복문의 횟수를 줄였다.