- 문제 설명
약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
- 풀이 과정
- 주어진 수의 범위 안에 있는 모든 수의 약수를 구해야한다.
- 주어진 수마다 약수의 개수를 카운트한다.
- 카운트 된 약수의 개수의 짝,홀을 구분하고
- 짝,홀의 따라 각 수를 + , - 를 해야한다.
- 완성 코드
function solution(left, right) {
let arr = [];
for (let i = left; i <=right; i++) {
let count = 0;
for (let j = 1; j <= i; j++) {
if( i%j ===0 ) {
count++;
}
}arr.push(count);
}
let arr3 = [];
for (let i = 0; i< arr.length; i++ ) {
if( arr[i]% 2 === 0) {
arr3.push("짝");
} else {
arr3.push("홀");
}
}
let arr4 = [];
for (let i =left; i <=right; i++) {
arr4.push(i);
}
let arr5 = [];
for (let i = 0 ; i <arr3.length; i++ ) {
if( arr3[i] == "짝") {
arr5.push(arr4[i]);
} else {
arr5.push(-arr4[i]);
}
}
return arr5.reduce((a,b) => a+b, 0)
}
- 다른사람의 풀이
- Math.sqrt() 제곱근을 활용해 간단히 해결했다.
- isInteger()를 활용해 제곱근이 정수면, 약수의 갯수가 홀수임을 이용했다.
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;
}