문제: https://school.programmers.co.kr/learn/courses/30/lessons/136798
class Solution {
public int solution(int number, int limit, int power) {
int answer = 0;
for(int i = 0; i < number; i++){
int n = calc(i+1);
if(n > limit){
answer += power;
}else{
answer += n;
}
}
return answer;
}
// 약수 개수 return
public int calc(int n){
int cnt = 0;
for(int i = 1; i <= n; i++){
if(n%i == 0){
cnt++;
}
}
return cnt;
}
}
→ 시간초과
number크기가 커지면서 약수 개수를 구하는 메소드에서 시간 초과
⇒ 약수 개수를 구할때 효율적인 방법이 필요
⇒ 제곱근을 이용해서 반복 횟수를 줄여주기
// 약수 개수 return
public int calc(int n){
int cnt = 0;
for(int i = 1; i*i <= n; i++){
if(i * i == n) cnt += 1;
else if(n % i == 0) cnt += 2;
}
return cnt;
}