1부터 number까지 각 수가 가지는 약수의 개수를 구하고, limit 을 초과하면 power로 대체
number = 10, limit = 3, power = 2 일때,
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 2 | 2 | 2 | 2 | 2 | |||||
3 | 3 | 3 | 3 | |||||||
4 | 4 | 4 | ||||||||
5 | 5 | 5 | ||||||||
6 | 6 | |||||||||
7 | 7 | |||||||||
8 | 8 | |||||||||
9 | 9 | |||||||||
10 | 10 | |||||||||
총 개수 | 1 | 2 | 2 | 3 | 2 | 4 | 2 | 4 | 3 | 4 |
결과값 : 1 + 2 + 2 + 3 + 2 + 2 + 2 + 2 + 3 + 2 = 21
public class Weapons {
public int solution(int number, int limit, int power) {
int[] divisor = new int[number + 1];
int result = 0;
for (int i = 1; i <= number; i++) {
for (int n = 1; n <= i / n; n++) {
if (i % n == 0) {
if (n * n == i) divisor[i] += 1;
else divisor[i] += 2;
}
}
result += divisor[i] <= limit ? divisor[i] : power;
}
return result;
}
public static void main(String[] args) {
Weapons weapons = new Weapons();
System.out.println(weapons.solution(5, 3, 2)); // 10
System.out.println(weapons.solution(10, 3, 2)); // 21
}
}