ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.11.16 // Programmers_약수의 합
    AIL( Algorithm I Learned) 2023. 11. 16. 10:14

    ## AIL_약수의 합

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

    *** 제한 사항
    n은 0 이상 3000이하인 정수입니다.

    *** 입출력 예
    n return
    12 28
    5 6

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

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 양의 정수 `n`을 입력 받아서, 그 수의 약수들을 모두 찾고 그 약수들을 모두 더한 값을 반환하는 함수를 작성하는 것입니다. 약수란 주어진 수를 나누어 떨어지게 하는 수를 말합니다. 


    2. 문제풀이

    function solution(n) {
        var answer = 0;
        for(let i = 1; i<=n; i++) {
            if(n % i === 0) {
                answer += i
            }
        }
        return answer;
    }
    /*
    테스트 1
    입력값 〉	12
    기댓값 〉	28
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	5
    기댓값 〉	6
    실행 결과 〉	테스트를 통과하였습니다.

     

    1. `solution` 함수는 변수 `answer`를 0으로 초기화 합니다. 이 변수는 약수들을 더한 값을 저장할 곳입니다.  

     

    2. `for` 루프를 통해 `i` 변수를 1부터 n까지 증가시킵니다. 이때, `i` 는 n의 약수 후보입니다.

     

    3. `if` 문을 사용하여 현재의 `i`가 n의 약수인지 확인합니다. `n % i == 0`은 n을 i로 나눈 나머지가 0인지 확인하는 조건입니다. 나머지가 0이라면 `i`는 n의 약수입니다. 

     

    4. 만약 `i`가 n의 약수라면, `answer`에 `i` 값을 더합니다. 이를 통해 현재 찾은 약수를 `answer`에 추가합니다.

     

    5. `for` 루프가 끝나면, `answer`에는 n의 모든 약수를 더한 값이 저장됩니다. 

     


    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;
     }
      /*
    테스트 1
    입력값 〉	12
    기댓값 〉	28
    실행 결과 〉	테스트를 통과하였습니다.
    테스트 2
    입력값 〉	5
    기댓값 〉	6
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. `i` 변수를 선언하고, 1부터 `n`의 제곱근까지 (`Math.sqrt(n)`)을 반복하는 `for` 루프를 설정합니다. 

     

    2. `i` 변수를 선언하고, 1부터 `n`의 제곱근까지 ('Math.sqrt(n)')이 반복하는 `for` 루프를 설정합니다. 

     

    3. 반복문 내에서, `if` 조건문으로 현재의 `i`가 `n`의 약수인지 확인합니다. `n % i` === 0`는 `n`을 i로 나눴을 때 나머지가 0인지 확인하는 조건입니다. 이 조건을 만족하면 `i`는 `n`의 약수입니다. 

     

    4. 약수인 경우, `answer`에 `i`와 `n/i` 값을 더합니다. `n/i` 는 `i`의 짝을 이루는 다른 약수입니다. 따라서 두 약수를 한번에 더합니다.

     

    5. 'for' 루프가 끝나면 `i`를 1 감소시키고, 만약 `i`와 `n/1`가 같다면 중복으로 더해진 것이므로 `answer -i`를 반환합니다. 중복으로 더해진 경우를 제외하고 최종 결과값을 반환합니다. 

     

    이 함수는 입력된 수의 제곱근까지만 반복하여 약수를 찾기 때문에 효율적입니다. 약수를 중복해서 더하는 경우를 방지하고, 더 적은 반복을 통해 약수를 찾아 전체 약수의 합을 계산할 수 있습니다. 


     

    # Math.sqrt()란?

    Math.sqrt() 함수는 숫자의 제곱근을 반환합니다. 양의 정수 또는 실수의 제곱근을 구하는데 사용됩니다. 

    Math.sqrt(x);

     

    여기서 `x`는 양의 정수 또는 실수입니다. `x`의 제곱근을 계산하고 이 값을 반환합니다. 

    주어진 숫자에 루트( √  )를 씌어줍니다. 만약 숫자가 음수이면 NaN를 반환합니다. 

     

    예를들어

    Math.sqrt(9); // 3
    Math.sqrt(2); // 1.414213562373095
    
    Math.sqrt(1); // 1
    Math.sqrt(0); // 0
    Math.sqrt(-1); // NaN

     

    이 메소드를 사용하여 주어진 수의 제곱근을 쉽게 계산할 수 있습니다. 

Designed by Tistory.