본문 바로가기
코테 준비/프로그래머스

[프로그래머스] Level 1. 약수의 합

by 귤이두번 2022. 2. 18.

 

from math import isqrt

def solution(n):
    answer = 0

    for i in range(1, isqrt(n) + 1):		# 1

        if (n % i) == 0:			# 2
            answer += i
            if i != (n // i):			# 3
                answer += (n // i)

    return answer

 

# 1

- 12의 약수를 구하기 위해 작은 수부터 나누어 준다면 (1, 12), (2, 6), (3, 4), (4, 3), (6, 2), (12, 1)이다

- 이때 4부터는 앞에것의 중복이므로 3까지만 나누어주면 된다

- 12는 3^2 = 9보다 크고 4^2 = 16보다 작으므로 isqrt(12) = 3번만 나누기를 하면 된다

 

i <= isqrt(n) < isqrt(n) + 1 

 

 

# 2

약수는 나누어 떨어져야하는 수 이므로 i로 나누었을 때 나머지가 0인지 확인

 

 

# 3 - 주의할점: 약수 2개가 같은 경우

- 4의 약수는 1, 2, 4

- 4입력 시 약수가 1, 2, 4이므로 답은 7이 되어야 하지만, i와 n // i를 둘 다 넣으면 2가 2번 더해져서 9가 출력된다

 

 

댓글