function divisors(number) {
let count = 0;
for(let i = 0; i <= Math.sqrt(number); i++){
if (number % i === 0){
count += 2;
}
}
if (Math.sqrt(number) === Math.floor(Math.sqrt(number))){
count--;
}
return count;
}
function solution(number, limit, power) {
const answer = [];
for(let j = 1; j <= number; j++){
const count = divisors(j);
answer.push(count <= limit ? count : power);
}
return answer.reduce((a,b) => a+b);
}
function solution(number, limit, power) {
var answer = 0;
for (let n = 1; n <= number; n++)
{
let count = 0;
for (let j = 1; j * j <= n; j++)
{
if (j * j == n) count++;
else if (n % j == 0) count += 2;
}
if (count > limit) count = power;
answer += count;
}
return answer;
}
처음에는 하나의 함수에서 진행했더니 시간이 너무 오래 걸렸다.
그래서 따로 구분해서 만들었다.
divisors 에서 제곱근까지 i로 나눴을 때 0이 나오면 약수는 대칭적이기 때문에 count에 2를 계속 더했다.
그 이후 제곱 수 일 경우에는 중복으로 더해졌기 때문에 1을 뺐다.
원래 함수로 돌아와서 for문을 통해 number까지 반복하고 약수의 개수가 limit를 안넘을 경우에는 그대로 answer에 추가하고 넘을 경우에는 power를 추가해서 reduce 함수를 통해 모두 더했다.
시간 소요는 확실히 이게 더 빠르다.