function solution(left, right) {
let number = [];
let i = left;
let sum = 0;
while (i < right){
number = [];
for(let j = 1; j<=left; j++){
if(left % j == 0){
number.push(j);
}
}
i = left++;
number.length % 2 === 0 ? sum += i : sum -= i;
}
return sum;
}
// while를 사용해서 범위 내의 숫자를 모두 순회하고 완전 제곱수를 판별하여 값을 더하거나 뺀다.
// 루프 안에서 중복 계산이 발생하며 계속 초기화를 진행하기 때문에 성능적으로는 좋지 않음.
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;
}
// 중복 계산이 없고 완전 제곱수를 판별할 때 루트 연산을 사용해서 효율적임.
시간 차이가 너무 많이 남.
내가 작성한 함수는 중복 계산을 진행해서 비교적 시간 소요도 많이 되서 효율적이지 못함.
숫자의 제곱근이 정수로 떨어지면 약수의 개수는 홀수가 됨.
Number.isInteger - 정수가 맞는지 아닌지 확인
따라서, 제곱근이 정수인지 아닌지 확인하여 약수 개수 확인
와... 진짜 신기하다. 새로운 걸 알아냈다.. 와우