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가 출력된다
'코테 준비 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level 1. 나누어 떨어지는 숫자 배열 (0) | 2022.02.18 |
---|---|
[프로그래머스] Level 1. 같은 숫자는 싫어 (0) | 2022.02.16 |
[프로그래머스] Level 1. 최대공약수와 최소공배수 (0) | 2022.02.15 |
[프로그래머스] Level 1. 두 정수 사이의 합 (0) | 2022.02.11 |
[프로그래머스] Level 1. 정수 제곱근 판별 (0) | 2022.02.10 |
댓글