약수의 합을 구하는 함수를 만드는 문제입니다
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수 solution을 완성해주세요
제한 사항
- n은 0 이상 3000 이하인 정수입니다
입출력 예시
입력 | 출력 |
12 | 26 |
5 | 6 |
0 | 0 |
입출력 예 #1
12의 약수는 1,2,3,4,6,12입니다 → 이를 모두 더하면 28입니다
입출력 예 #2
5의 약수는 1,5입니다 → 이를 모두 더하면 6입니다
입출력 예 #3
0의 약수는 없습니다→ 따라서 값은 0이 출력됩니다
Solution
#include<iostream>
using namespace std;
int solution(int n) {
int answer = 0;
if(n==0) return answer; // 입력이 0일 경우 바로 return
else{
for(int i=1;i<=n/2;i++){ // m/2까지 나머지가 0인 약수 찾기
if(n%i==0) answer+=i; // 해당 약수를 다 더해주기
}
answer+=n; // 자기 자신도 약수이므로 자신의 값도 더해주기
}
return answer; // 정답 return
}
→ for 함수에서 i의 반복을 n/2까지 한 이유는 2로 나누었을 때의 약수가 자기 자신을 제외하고 나올 수 있는 약수의 최대값이므로 n/2까지 반복 후 자기 자신을 더하면 반복문의 개수를 줄이면서 값을 구할 수 있어요
: 자기 자신을 제외한 약수의 최대값은 n/2의 값을 초과할 수 없다 → 반복문을 n까지 돌리지 않아도 된다
프로그래머스의 문제 하나를 풀어보면서 필요한 내용을 알려드렸습니다
다음에는 더 재밌는 문제 풀이로 돌아오겠습니다
'Problem Solving > C++' 카테고리의 다른 글
[프로그래머스] 3 x n 타일링 (3) | 2023.09.21 |
---|---|
[프로그래머스] 점 찍기 (4) | 2023.09.20 |
되 나눔수 (0) | 2023.08.01 |
2178번 - 미로 탐색 (0) | 2023.07.24 |
1389번 - 케빈 베이컨의 6단계 법칙 (0) | 2023.07.23 |