두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
public class Divisor {
public static void main(String[] args) {
int left = 13;
int right = 17;
Divisor d = new Divisor();
int solution = d.solution(left, right);
System.out.println("solution = " + solution);
}
public int solution(int left, int right) {
int answer = 0;
//left와 right의 약수가 총 몇개인지 return 해주는 메서드로 체크
for(int i=left; i<=right; i++){
int divisor = find(i);
if(divisor%2 == 0 && divisor != 1){
answer += i;
}else{
answer -= i;
}
}
return answer;
}
private int find(int key){
int res = 0;
for(int i=1; i<=key; i++){
if(key%i==0) res++;
}
return res;
}
}
이번 문제도 쉬운 편이다 약수를 구하는 공식만 안다면 금방 끝낼 수 있다. 약수를 구하는 공식은 위에 내가 사용한 find method처럼 체크할 수도 있지만
private int find(int key){
int res = 0;
for(int i=1 ; i<=Math.sqrt(key); i++) {
if( key % i == 0 ) {
res ++;
if(key/i != i) res++;
}
}
return res;
}
다음과 같이 제곱근을 활용해서 푸는 방식인데 이 방법은 더 공부해봐야겠다. 그리고 이 방법은 갯수만 구할 수 있는 방식이니 다른 문제에서는 이 방법을 커스텀해서 사용해야할 것이다. 인터넷에 검색하면 많이 나오니까 화이팅
약수를 구하는 공식을 정리 해놓자!