[알고리즘 프로그래머스] 약수의 합 (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)
댓글남기기