

function solution(left, right) {
let answer = 0;
let numbers = [];
const squareNumber = [];
for(let i=0; i<right-left+1; i++) {
numbers[i] = left + i;
}
for(let i=0; i<31; i++) {
squareNumber[i] = (i+1)*(i+1);
}
answer = numbers.reduce(function(acc,cur,i) {
if(squareNumber.includes(cur)) return acc-cur;
return acc+cur;
},0)
return answer;
}
✳️ 풀이 과정 :
(제곱수만 약수가 홀수개라는 것을 이용했다.)
1️⃣ for문을 이용해 계산해야할 수들을 numbers 배열에 넣어준다.
2️⃣ for문을 이용해 제한사항인 1000사이의 제곱수들을 squareNumber 배열에 넣어준다. (이건 아마 제한사항이 없었다면 코드르 이렇게 쓰기 힘들었을듯)
3️⃣ reduce를 활용해 제곱수라면 빼주고 아니라면 더해준다.
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()메서드 : 주어진 값이 정수인지 아닌지 판별함.)
(Math.sqrt()메서드 : 주어진 값의 제곱근을 반환함.)
출처 : https://programmers.co.kr/learn/courses/30/lessons/77884