function solution(left, right) {//left = 13, right = 17이라고 가정하면
let count = 0;
let evenArr = [];
let oddArr = [];
for(j = left; j <= right; j++){//13~17까지 한번씩 거쳐가면서
count = 0;
for(i = 0; i <= right; i++){
if(j % i === 0) {//1~17까지 나뉘어서 0이 되는 수, 즉 약수가 있는지 확인한다.
count++;//있다면 그 수를 센다.(각 수의 약수의 갯수)
}
}
if(count % 2 === 0) {//약수의 갯수가 짝수라면
evenArr.push(j);//짝수 배열에 넣는다.
} else {
oddArr.push(j);//홀수도 마찬가지
}
}
let evenSum = evenArr.reduce(//약수의 갯수가 짝수인 수와 홀수인 수를 각각 더한다.
(accum, curr)=>{
return accum+curr;
},0)
let oddSum = oddArr.reduce(
(accum, curr)=>{
return accum+curr;
},0)
let answer = evenSum - oddSum;//약수의 갯수가 짝수인 수의 합계에서 홀수인 수의 합계를 뺀다.
return answer;
}
다만...너무 코드가 길고 지저분하다는 느낌이 든다.
다른 분들의 풀이를 공부해보자.
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {//left부터right 까지
if (Number.isInteger(Math.sqrt(i))) {//각 수의 제곱근이 정수라면 약수의 갯수가 홀수이므로
answer -= i;//그 수를 뺀다.
} else {//아니라면 짝수이므로
answer += i;//그 수를 더한다.
}
}
return answer;
}
그 수의 제곱근이 정수라면 약수의 갯수가 홀수이다.
예) 36의 제곱근은 6으로 정수, 36의 약수의 갯수는
1,2,3,4,6,9,12,18,36 9개로 홀수이다.
제곱근이 되는 수는 짝을 이루지 않기 때문이다 (6)