[문제] 정수 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 |