출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

단순히 특정 수의 모든 약수의 합을 구하는 문제이다:

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

divisors라는 빈 리스트를 정의를 해주고, 1부터 n까지의 숫자들 중에서 n으로 나누었을 때 나머지가 0인 숫자들을 차례대로 divisors 리스트에 추가시켜준다. 차례대로 추가시키는 것이기 때문에 중복되는 숫자는 없고, 이에 따라 리스트의 모든 숫자들을 더해준다.

 

 

※ 다른 사람의 풀이

프로그래머스에서 가장 많은 좋아요를 받은 풀이이다.

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

작성자는 num 숫자의 절반까지만 체크를 하고, 이 체크된 숫자들 + num을 통해 약수의 합을 구할 수 있다고 설명한다. 이유는 체크를 할 때 1, 2, 3... 순서대로 체크를 하는데, 1 다음에 나오는 2가 이미 이후의 절반을 체크해주는 것이기 때문에 가능한 것이다. 즉, 아무리 큰 약수여도, 본래의 숫자 다음으로 가장 큰 약수는 2로 나누어질 것이기 때문이다. 이를 통해 효율성이 2배 늘어날 것이다.