단순히 특정 수의 모든 약수의 합을 구하는 문제이다:
def solution(n):
divisors = []
for i in range(1, n+1):
if n%i == 0:
divisors.append(i)
return sum(divisors)
divisors라는 빈 리스트를 정의를 해주고, 1부터 n까지의 숫자들 중에서 n으로 나누었을 때 나머지가 0인 숫자들을 차례대로 divisors 리스트에 추가시켜준다. 차례대로 추가시키는 것이기 때문에 중복되는 숫자는 없고, 이에 따라 리스트의 모든 숫자들을 더해준다.
※ 다른 사람의 풀이
프로그래머스에서 가장 많은 좋아요를 받은 풀이이다.
def solution(num):
return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])
작성자는 num 숫자의 절반까지만 체크를 하고, 이 체크된 숫자들 + num을 통해 약수의 합을 구할 수 있다고 설명한다. 이유는 체크를 할 때 1, 2, 3... 순서대로 체크를 하는데, 1 다음에 나오는 2가 이미 이후의 절반을 체크해주는 것이기 때문에 가능한 것이다. 즉, 아무리 큰 약수여도, 본래의 숫자 다음으로 가장 큰 약수는 2로 나누어질 것이기 때문이다. 이를 통해 효율성이 2배 늘어날 것이다.
'알고리즘 테스트 > 프로그래머스 문제풀이 및 해설' 카테고리의 다른 글
<프로그래머스 문제풀이: 자릿수 더하기> Level 1 - 파이썬 (0) | 2020.11.18 |
---|---|
<프로그래머스 문제풀이: 이상한 문자 만들기> Level 1 - 파이썬 (0) | 2020.11.17 |
<프로그래머스 문제풀이: 내적> Level 1- 파이썬 (0) | 2020.11.15 |
<프로그래머스 문제풀이: 시저 암호> Level 1 - 파이썬 (0) | 2020.11.14 |
<프로그래머스 문제풀이: 문자열을 정수로 바꾸기> Level 1 - 파이썬 (0) | 2020.11.13 |