두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
1 ≤ left ≤ right ≤ 1,000
left | right | result |
---|---|---|
13 | 17 | 43 |
24 | 27 | 52 |
다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
---|---|---|
13 | 1,13 | 2 |
14 | 1 ,2,7,14 | 4 |
15 | 1,3,5,15 | 4 |
16 | 1,2,4,8,16 | 5 |
17 | 1,17 | 2 |
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
---|---|---|
24 | 1,2,3,4,6,8,12,24 | 8 |
25 | 1,5,25 | 3 |
26 | 1,2,13,26 | 4 |
27 | 1,3,9,27 | 4 |
따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
입력받은 수가 완전제곱수(어떤 자연수를 제곱하여 만들어 지는 수)인 경우 약수의 개수는 홀수가 된다. 따라서 반복문을 사용하여 left부터 right까지의 수를 i로 입력 받고 숫자의 제곱근을 반환받는 Math.sqrt(i)를 사용하여 i의 제곱근을 구한뒤 제곱근이 정수(자연수)인지 조건문을 통해 확인하고 정수이면 완전제곱수이므로 약수의 개수가 홀수이기 때문에 result에서 -i를 해준다. i의 제곱근이 정수가 아닐 경우 완전제곱수가 아니므로 약수의 개수는 짝수, 따라서 result에 +i를 해준다.
function solution(left, right) {
let result = 0;
for (let i = left; i <= right; i++) {
if (Math.sqrt(i) % 1 === 0) { // Number.isInteger(Math.sqrt(i)를 통해서도 정수 판별이 가능
result = result - i;
} else {
result = result + i;
}
}
return result;
}
https://programmers.co.kr/learn/courses/30/lessons/77884
위 URL을 클릭하시면 해당 문제로 연결됩니다.