다희의 코딩 성장일기

[프로그래머스] level1. 약수의 합 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level1. 약수의 합 (자바 JAVA)

ilmiodiario 2021. 8. 20. 13:03

[ 문제 ]  [프로그래머스] level1. 약수의 합 (자바 JAVA)

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12928

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr


# 접근 방법 및 풀이 

 

  • n이 3000이기 때문에 범위가 크지않아 for문으로 i를 1부터해서 나누어 떨어지면 약수이기때문에 해당 i를 더해서 해도 되지만 n이 커지면 범위를 제곱근까지 해줘야한다.
  •  ex) n = 12일때, 12의 약수는 1, 2, 3, 4, 6, 12이다. 이때 12의 제곱근은 3.xxx이기 때문에 
  • i를 1, 2, 3까지만해도 1*12, 2*6, 3*4로 모든 약수를 구할 수 있다.
  • i로 나누어 떨어질 때의 i와 n을 i로 나눈 몫이 약수가 된다.

# 주의할 점 

 

  • 몫과 i가 같은 순간 두번 더하지 않게 조심해야한다.
  • ex) 1, 2, 4 -> 1*4 , 2*2 

 

JAVA 코드
import java.util.*;
class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 1; i <= Math.sqrt(n); i++){
            if(n%i==0){
                answer += i;
                if(n/i != i)
                    answer += n/i;
            }
        }
        return answer;
    }
}

 

 

 

REVIEW

Comments