두 정수 left와 right가 매개변수로 주어집니다.
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
1 ≤ left ≤ right ≤ 1,000
left right result
13 17 43
24 27 52
function find약수개수(num){
let 약수 = [];
for(let i =0; i < num; i ++){
if(num%i === 0){
약수.push(i)
}
}
return 약수.length+1;
}
function solution(left, right) {
let answer = 0;
for(let i = left; i < right + 1; i++){
const 약수개수 = find약수개수(i);
약수개수 % 2 === 0 ? answer = answer + i : answer = answer - i
}
return answer ;
}
약수 개수를 찾는 별도의 함수를 만들어 활용했다.
다른분들의 풀이중 눈에 띄는 것은 수학공식인 제곱근이 정수일 때 약수의 개수가 홀수인 방식으로 푸신분의 풀이가 기억에 남는다.
공식을 이용하니 시간복잡도도 O(n)으로 작성할 수 있게 되는 방식이다
나는 오늘도 O(n^2)를 달리네 ㅎ..
끝