[프로그래머스/java] 약수의 합

리트리버J

·

2020. 12. 30. 15:06

728x90

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

 

간단하다.
for문으로 1부터 ~ n(자기 자신)까지 1씩 올려가며 %연산자로 나누어 떨어지면 그 숫자를 더하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
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;
    }
}
cs

 

<사이트 풀이>

*포인트*

1. num/2 를 통해 for문을 절반으로 줄인다.

 

*모든 약수는 숫자의 절반 이하이다.*

 

짝수) 24라고 생각해보자. 약수에 2가 포함되므로 12의 약수를 구하면 된다!

홀수) 25이라고 생각해보자. 약수에 2가 포함되진 않지만 2를 나누면 12.5 → 12( int )가 되는데,

어차피 약수라 해봤자, 1, 5, 25일것이다. 12까지 가지 않는다.

99도 마찬가지.

1, 3, 9, 11, 33 으로 자기자신 99를 제외하고 모든 약수가 99/2 = 44.5 이하가 된다.

다른 모든 홀수도, 짝수도 마찬가지이다.

 

2. 마지막에 num을 더한다.( 자기 자신도 약수에 포함되므로 )

1
2
3
4
5
6
7
8
9
10
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;
    }
cs

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

728x90