나의 풀이
def solution(n):
answer = 0
for i in range(1,n+1):
if n%i == 0:
answer += i
return answer
solution(12) #28
모범 답안 1
def sumDivisor(n):
return sum([i for i in range(1,n+1) if n%i==0])
나와 같은 풀이인데, sum() 와 list comprehension으로 한 줄로 표현한게 멋지다.
모범 답안 2
def sumDivisor(n):
return n + sum([i for i in range(1, (n // 2) + 1) if n % i == 0])
위 풀이는 정말 흥미로운 풀이인 것 같다.
전부 다 나누어 확인하는 것이 아닌 num / 2 의 수들만 검사하는 것으로, 성능을 약 2배 향상시킬 수 있다.
- n = 12일 경우
range(1,7)의 숫자들 1~6 만을 검사한다.
그러면 1,2,3,4,6 + 12 = 28이다.
- n = 32일 경우
range(1,17)의 숫자들 1~16 만을 검사한다.
그러면 1,2,4,8,16 + 32 = 63이다.
'Computer Science > Algorithms' 카테고리의 다른 글
[python] 프로그래머스 :: 서울에서 김서방 찾기 (0) | 2019.10.29 |
---|---|
[python] 프로그래머스 - 수박수박수박수박수박수? (0) | 2019.10.29 |
[python] 프로그래머스 - 시저 암호 (두 가지 풀이방법) (2) | 2019.10.29 |