Programmers Coding Quiz #20 약수의 합

김기욱·2021년 2월 3일
0

코딩테스트

목록 보기
20/68

문제 설명

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

제한사항

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

입출력 예

stringsreturn
1228
56

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

풀이

def solution(n):
    return  sum([i for i in range(1, n+1) if n%i == 0])
  1. 약수는 나눠졌을 때 나머지가 0이 나오는 수 입니다.
  2. 이런 조건식이 들어간 리스트컴프리헨션을 사용하고, sum으로 합쳐줍니다.

다른풀이

return num + sum([i for i in range(1, (num // 2) + 1) if num % i == 0])

에라토네스 체와 비슷하게 반절만 돌려도 문제없습니다. 1을 제외한 가장 작은 약수인 2로 나눈다면 나머지 몫은 정확히 반절, 그외 나머지 약수는 최대 반절을 넘을 수 없으니까요. 저 같은 경우 요소 자기자신을 처치하기 곤란해서 그냥 다돌려버렸는데, num을 따로 빼놓고 계산하는 식으로 간단히 해결했네요.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글