Lv1. 연습문제 - 약수의 합


ㅠㅜㅗㅛㅓㅡ뎌


이 문제는 최적화를 까먹기 쉬운 문제다.

route(n)까지만 검사해주면 되는데도 말이다!

  1. n이 0과 1일 때는 예외처리해준다.

  2. 1부터 route(n)까지 loop를 돌며 약수를 구한다.

  3. 만약 약수라면 제곱수일 때를 생각해줘야 한다.

    4의 약수는 1, 2, 4인데 2 * 2는 4이므로 이럴 땐 한번만 더해준다.

  4. answer 반환!


소스코드는 다음과 같다.

import math

def solution(n):
    if n < 2 :
        return n
    answer = 0
    for i in range(1, int(math.sqrt(n)) + 1):
        if not n % i:
            answer += (i + (n // i)) if i != (n // i) else i
    return answer



약수의 합 Github에서 보기