두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
function solution(left, right) {
let answer = 0
for(i=left;i<right+1;i++) {
let count = 0
for(j=1;j<i+1;j++) {
if(i%j==0) {
count++
}
}
if(count%2==0) {
answer+=i
} else {
answer-=i
}
}
return answer
}
count를 초기화하는 위치를 잘못 설정해서 원하는 값이 도출되지 않았다...!
진짜 차근차근 다시보니까 count는 for문 안에서 초기화가 되었어야하네...?
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;
}
Math.sqrt() 를 이용해서 깔-끔하게 해결한 코드가 있었다.
제곱근이 정수면 약수의 개수가 홀수란다....
코테공부를 하면서 느낀건.... 수학을 잘하면... 도움이 많이 된다는 사실
EX)
Math.sqrt(9) = 3 <- 정수O / 9의 약수의 개수는 1 3 9 총 3개, 홀수O
Math.sqrt(8) = 2.82.. <- 정수X / 8의 약수의 개수는 1 2 4 8 총 4개, 홀수X
Math.sqrt(6) = 2.44..<- 정수X / 6의 약수의 개수는 1 2 3 6 총 4개, 홀수X
Math.sqrt(4)= 2 <- 정수O / 4의 약수 개수는 1 2 4 총 3개, 홀수 O
Math.sqrt() MDN 링크
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt
https://school.programmers.co.kr/learn/courses/30/lessons/77884#