안녕하세요 오늘은 벌써 두번째 포스트입니다!

열공해서 꼭 취직하고 싶오요..


문제는 다음과 같습니다.

정수 n의 모든 약수를 모두 더한 값을 반환하라

먼저 약수란 무엇인지 알아보겠습니다

약수 : 어떤 정수를 나누어 떨어지게 하는 0이 아닌 정수

 

먼저 여러개의 약수를 구해야 하므로 for문을 사용하여 루프를 돌면서 찾아보는게 좋겠죠?

정수 n의 약수의 범위는 1부터 n까지이니 아래와 같은 for문을 작성할 수 있습니다!

for i in range(1,n+1)

 

더불어 약수의 정의에서 보이듯이 어떤 정수(n)를 나누어 떨어지게 한다고 했으니

아래와 같은 식을 유추해볼수 있습니다.

n%i == 0 일때 i가 n의 약수이다

 

def solution(n):
    answer = 0
    for i in range(1, n+1):
        if n%i == 0:
            answer += i
    return answer

위의 내용을 바탕으로 문제를 풀어보았습니다.

이해가 안되는 부분이 있으시다면 언제든 댓글 주세요


제 코딩 천재 친구의 의견을 바탕으로 더 빠르게 풀수 있는 방법을 추가로 소개해 드릴게요

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

달라진 부분을 눈치 채셨나요? ㅎㅎ

정수 n의 약수의 범위가 n까지는 맞지만,

n을 제외한 약수는 최대 n/2을 넘을 수 없기 때문에 for문이 돌아가는 횟수를 반으로 줄일 수 있게 되었습니다~~

 

감사합니다.

'파이썬 문제 풀기!' 카테고리의 다른 글

하샤드 수 검사하기  (1) 2023.10.31
정수를 내림차순으로 배치하기  (0) 2023.10.31
정수의 제곱근 판별하기  (2) 2023.10.27
짝수와 홀수 구하기  (0) 2023.10.26
배열의 평균값 구하기  (3) 2023.10.23

+ Recent posts