안녕하세요 오늘은 벌써 두번째 포스트입니다!
열공해서 꼭 취직하고 싶오요..
문제는 다음과 같습니다.
정수 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 |