본문 바로가기
알고리즘/프로그래머스

[python] 약수의 합(연습문제)

by 민-Zero 2020. 4. 12.

문제의 목표는 주어진 수 n의 모든 약수에 대한 합을 반환하면 되는 간단한 문제이다. 이때 약수에는 자기 자신까지 포함된다. 즉, n=7이라면 약수는 1, 7로 약수를 모두 더한 8을 반환하면 된다.

 

설계 및 구현

구현을 위한 함수는 약수를 찾아야 하는 n이 매개변수로 있는 간단한 함수이다.

구현내용은 간단히 생각하면 n보다 작은 수들을 모두 찾아 해당 수들을 사용해 n을 나누어 나머지가 0인지 확인하면 된다. 만약 n이 3000일 때 작은 수를 모두 확인한다면 확인해야 할 숫자가 너무 많기 때문에 효율이 떨어진다. 따라서 확인할 숫자는 약수중 최대가 되는 숫자인 n/2 까지만 확인하면 된다.

① n의 최대 약수인 n/2까지의 모든수들을 n과 나누어 나머지가 0인지 확인

② 나머지가 0이라면 결과값에 더하기

 

①을 수행하기 위해 range(1, n//2+1)을 통해 n/2까지의 숫자들만 확인한다. 이때 반복문 뒤에 조건문 붙여 나머지가 0인 숫자만 리스트에 추가한다.

② sum()함수를 통해 나머지가 0인 수들을 저장한 리스트의 총합을 구하고 n/2까지의 숫자만 포함되어 있으므로 자기 자신을 더하여 반환하면 문제가 원하는 동작을 수행하게 된다.

 

위의 코드로 채점을 통과할 수 있었다.

댓글