프로그래머스 LV1 약수의 합(연습문제)

프로그래머스 LV1 약수의 합(연습문제)

2021, Apr 05    

프로그래머스 lv1 약수의 합(연습문제)

문제 설명

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

제한 사항

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

입출력 예

n return
12 28
5 6

입출력 예 설명

입출력 예 #1

12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2

5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.


접근

약수를 모두 구하는 반복문을 짠 후 다 더해주면 된다.


풀이

# 반 넘는 값을 검사할 필요가 없어서 (n//2)만큼만하고 +n을 했음

def solution(n): return n + sum([i for i in range(1,(n//2) +1) if n % i == 0])

if __name__ =="__main__":
    n = 5
    print(solution(n))

왜 반만 검사하면 되나? 예를 들어 100이라고하면 50이 넘는 숫자는 어차피 약수가 될 수 없으므로 절반까지만 검사해도 된다.
range(start, end) 로 1부터 n//2까지의 숫자 중에서 n으로 나눠서 나머지가 0 인 값을 리스트에 다 더한 후, 마지막에 n을 더하면 모든 약수의 합이 된다


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges