코딩 테스트/Python

약수의 합

susinlee 2024. 12. 15. 12:15

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

 

 

[풀이]

약수는 쌍(pair)으로 존재한다는 점을 알면 더욱 빠르게 해결할 수 있다. 

12 = 1 x 12 → (1, 12)

12 = 2 x 6 → (2, 6)

12 = 3 x 4 → (3, 4)

 

1. 1 부터 n**0.5 까지 순회를 돌면서 i 와 n // i 두값을 모두 약수 처리해 더해준다.

2. n이 제곱수라면 루트값이 중복되므로 한번만 처리할 수 있게 한다

 

def solution(n):
    answer = 0
    
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            answer += i
            if i != n // i:
                answer += n // i

    return answer

 

리스트 컴프리헨션으로도 풀어보자

def solution(n):

    return sum(
    i + (n // i if i != n // i else 0)
    for i in range(1, int(n**0.5) + 1) 
    if n % i == 0)

'코딩 테스트 > Python' 카테고리의 다른 글

부족한 금액 계산하기  (0) 2024.12.15
약수의 개수와 덧셈  (0) 2024.12.15
음양 더하기  (0) 2024.12.15
두 정수 사이의 합  (0) 2024.12.15
파이썬의 데이터형과 자료구조  (1) 2024.12.15