약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
1 ≤ left ≤ right ≤ 1,000
💻 풀이
📌 약수의 특징
1. 약수는 1과 자기 자신을 포함한다.
2. 짝을 이루는 구조이다.
3. 제곱근을 이용하면 시간복잡도를 줄일 수 있다.
약수의 특징 중 제곱근을 활용한 풀이를 진행했다.
먼저 i=left 로 시작 조건과 i <= right로 종료 조건을 설정해준 후
Math.sqrt() 를 이용해 제곱근을 구하고 1과 나눈 나머지가 0일 경우를 체크해 준다
만약 약수의 개수가 짝수일 경우 제곱근은 3.2323... 으로 나올 것이고, 홀수일 경우 3 으로 나오기 때문에 1로 나눈 나머지가 0일 경우에는 약수가 짝수, 아닐경우 홀수인 것을 알 수 있다.
이후 제한조건에서 알 수 있듯이 left와 right는 동일한 숫자일 수 있기 때문에 만약 같은 숫자일 경우 체크하는 코드를 작성하고 마무리 했다.
⌛ 시간 0.72ms ~ 12.72ms
public int solution1(int left, int right) {
int result = 0;
for(int i = left; i <= right; i++) {
if(Math.sqrt(i) % 1 == 0) { // 홀수인 경우 (제곱근이 정수로 딱 떨어짐)
result -= i;
System.out.println();
}else { // 짝수인 경우
System.out.println();
result += i;
}
}
if(left == right) {
result = left;
result += right;
}
return result;
}