function solution(left, right) {
let sum = 0;
for (let num = left; num <= right; num++) {
if (primeCount(num)) sum += num;
else sum -= num;
}
return sum;
}
function primeCount(n) {
let prime = [];
if (n % Math.sqrt(n) === 0) {
prime.push(Math.sqrt(n));
}
for (let i = 1; i < Math.sqrt(n); i++) {
if (n % i === 0) {
prime.push(i);
prime.push(n / i);
}
}
return prime.length % 2 === 0;
}
풀이 과정
약수를 구하는 함수를 따로 만들어, left 부터 right 까지 해당 함수로 보내고,
각 수의 약수를 구한뒤, 약수를 담은 배열의 길이가 짝수이면 true, 홀수이면 false 를 반환하게 했다.
간단한 문제지만 조금더 간단히 구현할 수 있지 않을까? 생각이 들었다.
그래서 다른사람의 풀이를 봤는데
다른사람의 풀이
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;
}