본문 바로가기

Algorithm/Programers - Java

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

 

Level. 1

 

문제

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

 

풀이

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

 

해결방법

1. n이 1일 경우 약수가 1 뿐이므로 1을 return 한다.

2. 반복문을 n/2까지 돌린다.

3. i가 min(n을 i로 나눈 수)과 같을 경우, 해당 약수는 이미 구한 값이므로 반복문에서 빠져나온다.

4. n이 i로 나눠질경우
  4-1) i와 min은 n의 약수이므로 answer에 두 수를 더한다. 

  4-2) min과 i가 동일하다면 i는 n의 제곱근이며, 약수 구하기를 종료하고 반복문에서 빠져나온다.

 

 

 


다른 풀이

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;
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        SumDivisor c = new SumDivisor();
        System.out.println(c.sumDivisor(12));
    }
}

 

 

 

 


https://school.programmers.co.kr/learn/courses/30/lessons/12928?language=java# 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr