루나의 TIL 기술 블로그

프로그래머스 level 1 약수의 합

|

약수의 합

문제 설명

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

제출 답안

def solution(n):
    ans = 0
    for i in range(1,n+1):
        if n%i==0:
            ans += i
    return ans

range(0,n+1)이라고 써서 처음에 0은 나눌 수 없다는 에러가 떴다.

모범 답안

def sumDivisor(num):
    # num / 2 의 수들만 검사하면 성능 약 2배 향상잼
    return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])

수학 설명

예를 들어 12(n)의 약수 1, 2, 3, 4, 6, 12 중 자신을 제외한 가장 큰 약수는 n/2 이므로, 12의 반인 6까지만 약수 검사를 진행해도 약수의 갯수를 구할 수 있다.

파이썬에서 ‘/’ 나누기 연산자를 두번 ‘//’쓰면 나머지 소수점을 버린 몫을 얻는다. 예를 들면 5/2 = 2.5 이지만 5//2 = 2 이다.

이렇게 하면 연산 속도가 2배 빨라진다.

주요 포인트 및 생각해볼 점

for 반복문을 []를 이용해서 한 줄로 쓰는 연습을 해봐야겠다.