https://programmers.co.kr/learn/courses/30/lessons/12928
정수 N을 입력받았을 때, N의 약수의 합을 구하는 문제이다.
- N이 어떤 숫자에 의해 나눠졌을때 나머지가 0이 되면 약수되는것을 이용해보자!
- 1번에서 약수라는 것이 구해진다면 list에 추가해준다.
- list에 있는 원소들의 합을 구해준다.
def solution(n):
list = []
i = 1
while (i <= n):
if (n % i == 0):
list.append(i)
i += 1
return sum(list)
def sumDivisor(num): # 다른사람 코드
# num / 2 의 수들만 검사하면 성능 약 2배 향상잼
return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
위의 다른 분이 푼 코드에서 파라미터로 입력받은 숫자의 1/2 수들만 검사하면 된다는 방법이 정말 놀라웠다. 자기 자신은 무조건 약수에 포함되므로 그 숫자만 포함시켜주고, 나머지 1/2만 검사하는 이 방법..!! 이게 약수든 소수를 구하는 문제든 앞으로 이 방법을 이용하면 시간복잡도에서 정말 유용하게 활용될 수 있을 것 같다.