본문 바로가기

코딩 테스트

[프로그래머스] (Lv.1) 약수의 합

728x90

문제


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

 

 

-  출력 예시  -

정답 코드


<  내 정답 코드  >

//  모든 범위의 값을 확인하기 (비효율적)
class Solution {
    public int solution(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                sum += i;
            }
        }
        return sum;
    }
}

 

<  타인 답변 코드  >

//  특정 범위의 값만 확인하기 (효율적)
class SumDivisor {
    public int sumDivisor(int num) {
        int answer = 0;
        for(int i = 1; i <= num / 2; i++) {
            if(num % i == 0) {
            	answer += i;
            }
        }
        return answer + num;
    }
}

이것을 주의하자!


-  더 효율적인 코드 작성을 위해선 '약수' 의 특징을 알아야 한다. 본래의 값을 제외하곤 약수는 해당 수의 / 2 영역 넘지 않는다. 예를 들어,  12의 약수는 [ 1234612 ] 이다. 40의 약수는 [ 12458102040 ] 이다. 그래서 특정한 수에 2를 나눈 값까지만 확인해보면 된다.