[프로그래머스] 약수의 합 문제풀이 python

mauz·2022년 6월 18일
0
post-custom-banner

🐒 약수의 합

https://programmers.co.kr/learn/courses/30/lessons/12928#

✍ 나의 풀이

def solution(n):
    sqrt = int(n**(1/2))
    answer = 0
    for i in range(1,sqrt+1):
        if n % i == 0:
            if i**2 == n:
                answer += i
                break
            answer += i + n//i
    return answer

🧠 문제 이해

예를 들어 12의 약수를 구한다면

1, 2, 3, 4, 6, 12

인데

12의 제곱근까지만 약수를 구하면

1, 2, 3

이고 얘네들은 4, 6, 12 과 짝임을 알 수 있다.

따라서 제곱근 까지만 약수를 구해도 된다..

만약 9의 약수를 구한다면..

1, 3, 9

로 약수의 개수가 홀수이고 제곱근 까지 약수를 구한다면

1, 3

이때 3은 짝이 없으므로 예외 처리가 필요하다


코드

def solution(n):
    sqrt = int(n**(1/2))	# n의 제곱근
    answer = 0	# 약수의 합을 저장하는 변수 선언
    for i in range(1,sqrt+1):	# 1부터 n의 제곱근 까지의 수 에서
        if n % i == 0:	# n가 i로 나누어 떨어진다면 i는 n의 약수
            if i**2 == n: # 만약 약수의 갯수가 홀수라면 
                answer += i	# 짝이 없으므로 한놈만 더해준다.
                return answer	# 약수의 합 리턴
            answer += i + n//i	# i # 약수와 그 짝을 더해준다.
    return answer #약수의 합 리턴
profile
쥐구멍에 볕드는 날
post-custom-banner

0개의 댓글