정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
n은 0 이상 3000이하인 정수입니다.
입출력 예
n return
12 28
5 6
내 풀이:
def solution(n):
answer = []
for i in range(1, n+1):
if n % i == 0:
answer.append(i)
return sum(answer)
i)약수를 찾기 -> n % i == 0
ii) sum을 통해 약수의 합 구하기
생각해보니까 굳이 list에 안 넣고 그냥 int 하나 만들어서 더할 걸 싶었다. 근데 n이 3000이하 정수로 꽤 커서 실행횟수가 너무 많을 거 같아서 어떻게 향상시킬 수 있을까 해서 다른사람들의 풀이를 참고했다
def sumDivisor(num):
return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
n//2을 함으로써 중복되는 계산을 줄일 수 있어 성능을 향상시킬 수 있음