tip!
어떤 자연수의 약수들을 구할 때, 1부터 그 절반 값까지만 나누어 보면 자신을 제외한 모든 약수를 구할 수 있다.
example)
12의 약수 : 1 2 3 4 6 12
12/2 = 6
28의 약수 : 1 2 4 7 14 28
28/2 = 14
[내가 푼 방식]
자연수 n은 0부터 3000까지의 숫자 이고 n/2로 나눈 값 까지만 점검을 해줘도 약수를 구할 수 있다.
반복문을 사용하여 자연수 n 을 나눴을 때 나머지가 0이 되게 하는 자연수 j값을 찾는다.
합을 구해야 하기 때문에 sum 변수를 만들어 저장한다.
return 할 때에는 자연수 n 본인도 합해줘야하기 때문에, (n/2 까지 약수 값의 합+ 자기자신) 을 return해준다.
class Solution {
public int solution(int n) {
int sum = 0;
int half = 0;
if(n>=0 & n<=3000) {
half = n/2;
}
for(int j = 1; j <= half; j++) {
int num = n%j;
if(num==0) {
sum = sum + j;
}
}
return sum + n;
}
}
다른사람의 풀이 참고!
class SumDivisor {
public int sumDivisor(int num) {
int answer = 0;
for(int i = 1; i <= num/2; i++){
if(num%i == 0) answer += i;
}
return answer+num;
}