문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ left ≤ right ≤ 1,000
입출력 예
left right result
13 17 43
24 27 52
function solution(left, right, m=0, n=0) {
for(let i=left;i<=right;i++){
for(let l=1;l<=i;l++){
i%l===0?n++:n;
console.log(i,l,n);
}
n%2?m-=i:m+=i;
}
return m;
}
처음 작성했던 답안이다. i가 ++되면서 n이 같이 리셋되지 않으므로 의도와 다른 결과가 발생했다.
function solution(left, right, m=0) {
for(let i=left;i<=right;i++){
let n=0;
for(let l=1;l<=i;l++){
i%l===0?n++:n;
}
n%2?m-=i:m+=i;
}
return m;
}
i에 대한 반복이 돌기 직전 let n=0;으로 n이 리셋될 수 있도록 코드를 수정하였다.
통과하였고, 다른 분들이 어떻게 더 좋은 코드를 작성했는지 확인했다.
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;
}
function solution(left, right) {
var answer = 0;
for(let i = left;i <= right;i++){
if(Math.sqrt(i)%1===0) answer -= i;
else answer += i;
}
return answer;
}
아... 이렇게 세세하게 수리 산출을 할 기회가 없었다. 이런 식의 접근도 그렇고 이런 함수 역시 처음 들여다 보게 되었다. 어진씨도 감탄하고 가셨네... 나도 댓글처럼 중얼거렸다. 역시 이과...
https://codechacha.com/ko/javascript-convert-float-to-integer/