Programmers/Level 1

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

emayom 2021. 7. 7. 12:56

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

 

👇🏻

Link_Click

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)


1.

for반복문으로 i를 증가시키며 나머지가 0이되는 약수를 찾아 모두를 합했다.

가장 정확한 방법으로 테스트에 통과할 수 있다!

하지만 n은 3000 이하인 정수이기 때문에 for문에서만 최대 3000번을 돌게 될 것이다! ㅠㅠ

function solution(n) {
    var sum = 0;
    
    for(let i=1; i<=n; i++){
    	//약수(나누었을 때 나머지가 0이 되는 수) 체크
        if(n%i === 0){
            sum+=i;
        }
    } 
    return sum;
}

2.

[ 3개 이상의 소수로 구성된  합성수는 그 수의 제곱근보다 작거나 같은 약수를 갖는다. ]

라는 정리를 참고하면 반복 횟수를 줄일 수 있다!

 

12의 제곱근은 3.4641....이 나오는데 결론적으로 12의 경우 3번만 반복하면 

3000일 경우에도 반복문을 54번만 돌리면 약수들을 모두 구할 수 있다ㅎㅎㅎ

 

근데 이대로만 제출하면 정확도가 82.4점이 나온다.

약수가 n의 제곱근과 같다면 두 번 더해지기 때문에 확인해주는 코드를 추가로 작성해줘야 한다.

function solution(n) {
    var divisor = Math.sqrt(n);
    var sum = 0;
    
    for(let i=1; i<=divisor; i++){
        if(n%i === 0){
            sum += i + (n/i); 
        }
    } 
    return sum;
}

이렇게 수정하면 정확성 테스트를 통과할 수 있다.

function solution(n) {
    var divisor = Math.sqrt(n);
    var sum = 0;
    
    for(let i=1; i<=divisor; i++){
        if(n%i === 0){
            sum += i; 
            //제곱근과 i 일치여부 확인
            //if(n/i != i)
            if(i != divisor)
                sum += n/i;
        }
    } 
    return sum;
}

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***