문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
나의 풀이
function solution(left, right) {
var answer = 0;
for (let num = left; num <= right; num++) {
let divisorsCount = 0;
// 약수의 개수 구하기
for(let i = 1; i <= num; i++) {
if(num % i === 0) {
divisorsCount++;
}
}
// 약수의 개수가 짝이면 더하고, 홀수면 뺀다.
if(divisorsCount % 2 === 0) {
answer += num;
}else {
answer -= num;
}
}
return answer;
}
다른 풀이
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
약수의 개수를 직접 구했는데 이 풀이는 약수의 개수를 직접 계산하지 않고, 각 숫자의 제곱근을 이용하여 약수의 개수가 짝수인지 홀수인지를 판별하는 방식으로 문제를 해결했다.
Math.sqrt()
문법으로 제곱근을 구한 뒤 Number.isInteger()
문법을 사용하여 정수를 구별해 주고 제곱근이 정수인 경우 빼주고, 정수가 아닌 경우에는 더해 줬다.
기억하자 제곱근이 정수면 약수의 개수는 홀수다...✍️