[Level 1] 약수의 합

풀이 1

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

    return answer


print(solution(12))
print(solution(5))

노말한 풀이 방법

풀이 2

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

얼핏 복잡해보일 수도 있는데 다음 코드를 리스트 컴프리헨션으로 만든 것이다.

def solution(n):
    answer = 0
    for i in range(1, (n // 2 + 1)):
        if n % i == 0:
            answer += i

    return answer + n

약수의 주요 특징은 자신을 제외한 가장 큰 약수는 n//2다.
range 범위를 n//2 까지 함으로써 성능이 약 2배 향상되었다.
범위를 int(n**0.5)+1까지 해도 된다.

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

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

# 3번
def solution(n):
    result = 0

    for i in range(1, int(n**0.5)+1):
        if n % i == 0:
            result += i
            if n != n//i: # 제곱 수는 한번만 넣기
                result += (n//i) 
    return result

참고 자료

좋은 웹페이지 즐겨찾기