[프로그래머스] 약수의 합 (JAVA)

업데이트:

문제 설명

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



  • 제한 조건

n은 0 이상 3000이하인 정수입니다.


  • 예시

image




풀이

class Solution {
    public int solution(int n) {
        
        int answer = 0;
        
        for(int i=1; i<=n; i++){
            
            if(n%i==0){
                answer += i;
            }
        }
        
        return answer;
    }
}


약수는 어떤 수를 나누었을 때 나머지가 없이 떨어지는 것을 의미하기 때문에
주어진 n을 1부터 차례대로 나눈 후 나머지가 0인 것을 합해주면 된다.



다른 사람 풀이

class Solution {
    public int solution(int n) {
        
        int answer = 0;
        
        for(int i=1; i<=n/2; i++){
            
            if(n%i==0){
                answer += i;
            }
            
        }
        
        return answer+n;
    }
}

주어진 n값의 절반만 반복해도 된다.
왜?
8의 약수 = 1,2,4,8
12의 약수 = 1,2,4,6,8,12
48의 약수 = 1,2,3,4,6,8,12,16,24,48



하지만 for문의 i값이 1부터 시작하기 때문에,
마지막 값(주어진 값)은 answer에 더해지지 않기 때문에 return할 때 n값을 더해줘야한다.




댓글남기기