function solution(number, limit, power) {
let result = 0;
let numArr = [];
for (let i = 1; i <= number; i++) {
let num = i;
let count = 0;
for (let j = 1; j <= Math.sqrt(num); j++) {
if (num % j === 0) {
if (num / j === j) {
count++;
} else {
count += 2;
}
}
}
numArr.push(count);
}
for (let i = 0; i < number; i++) {
if (numArr[i] > limit) {
numArr[i] = power;
}
}
return numArr.reduce((a, b) => a + b, 0);
}
단순히 이중반복문을 한다면 시간초과 오류가 난다.
약수 갯수는 제곱근까지만 범위를 설정해주면 시간복잡도를 줄일수 있다.
예를 들어서 number 가 9라면, 약수는 총 1 3 9인데 3까지만 범위를 설정해주고
만약에 9 / 3 === 3 이라면 제곱근이므로 count는 한개만 더해주고 그게 아니라면 count를 2개를 더해준다.