[프로그래머스][LV.1] 약수의 합 | python3

2025. 1. 15. 10:41프로그래머스/LV.1

 

문제 링크: 약수의 합

 

문제 설명

문제 설명

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

제한사항

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

 


문제 풀이

n까지의 수를 루프해 나머지가 0인 수(약수이기 때문에)들의 합을 구했다.

 

내코드

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

 

 


더보기

다른사람풀이

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

여기서 무릎을 팍 쳤다. 수의 반 이상이 되는 약수는 없으니 이걸 코드에 넣으면 시간도 절약되고 성능도 향상된다. 여기에 자기자신인 n만 더해주면 된다. 코드를 한줄로 간결하게 짜는 것도 배우자.

그리고 댓글에 n**0.5를 해줘도 된다는 말이 있던데 이 부분은 더 봐야 할 것 같다. 댓글은 캡처로 가지고 왔다.

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

한 줄로 하는 코드