function solution(number, limit, power) {
let answer = 0;
for(let i = 0; i <= number; i++){
let count = 0; // 약수의 개수 저장
const sqrt = Math.sqrt(i); // 제곱근
for(let idx = 1; idx <= sqrt; idx++){
if(i % idx === 0){
if(i / idx === idx){
count += 1;
} else {
count += 2;
}
}
}
if(count > limit){
answer += power
}
else {
answer += count;
}
}
return answer;
}
1. 매개변수
number
: 기사단원의 수
limit
: 공격력 제한 수치
power
: 제한수치를 초과한 기사가 사용할 무기의 공격력
2. 약수의 개수
for(i = 1부터 N의 제곱근까지){
if (N 을 i 로 나눈 나머지가 0이면){
if (N / i 의 값이 i 이면){ 약수의 개수는 1개 }
else{ 약수의 개수는 2개 }
}
}
3. 제곱근으로 구하는 이유
반복문의 범위를 줄이기 위해 사용
4. 풀이
answer
은 무기를 만들기 위해 필요한 철의 총 무게를 담기 위한 변수이다.
우선 기사 번호를 구해야 하기 때문에 반복문을 사용하며 1번 예제처럼 1~5까지 반복을 돌려 기사 번호를 나타낸 다음 약수의 개수를 구해야 한다.
count
로 약수의 개수를 저장할 변수. sqrt
는 제곱근을 계산할 변수를 설정한다.
idx
는 1부터 i
의 제곱근까지 설정하고 반복한다. i % idx === 0
이면 idx
는 i의 약수를 나타내는 것을 설정 한 후 idx
가 i
의 정확한 제곱근일 때는 1만 증가 시키고 아닐때는 2만큼 증가 시킨다.
왜냐하면 idx
와 i / idx
는 약수가 서로 다르기 때문.
그 다음 공격력 제한에 따른 무게 계산을 해야하는데 계산된 약수의 개수가 limit
보다 큰지 확인한 후, 크면 공격력을 power
로 설정하고 answer
을 더한다. 만약 작다면 약수에 개수 count
에 answer
을 더해 구한다.
난 이게 어렵다 ㅠㅠ 왜지 ㅠㅠ
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;
}