[알고리즘 프로그래머스] 약수의 합 (LEVEL 1)

(문제) 약수의 합


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

입력설명

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

출력설명

n의 약수를 모두 더한 값을 리턴

테스트케이스

입력예제 출력예제
12 28
5 6

해결방법

약수를 구하기 위해서 n의 기준 값에서 나누어 떨어질 수 있는 값들을 구한다.

이때, 반복문의 반복 범위는 1 ~ n의 제곱근 까지 반복을 한다.

만약에 반복문을 통해 얻이 n과 나누어 떨어지는 더하고,

그것과 대칭되는 약수를 n // 나누어떨어지는 값 을 통해 또 더한다.

이때 만약 나누어 떨어지는 값의 제곱이 n과 같을 경우는 대칭되는 것은 구하지 않는다.



코드

n = int(input())

_sum = 0

for i in range(1, int(n**0.5)+1):
    if n % i == 0:
        # 앞에 있는 약수 구하기
        _sum = _sum + i

        # 앞에 구한 약수와 대칭하는 것 구하기
        # 만약 25 일 경우 5는 1개 있으므로 i 가 n의 제곱이 아닐 경우만
        if n // i != i:
            _sum = _sum + (n // i)

print(_sum)

댓글남기기