JavaScripts 문제

문제 60. 기사단원의 무기(난이도 5)

kagan-draca 2024. 8. 20. 20:55

 

글만 잔득 길지 문제는 쉬운 문제다

(

  단, 1과 약수를 구할 때 참여한 숫자 본인은

  무조건 약수 안에 들어가기 때문에 

  count를 2로 설정하고,

  문제를 풀어야 "시간 초과"에 안 걸린다.

)

 

let result = 1

1번 기사는 스킵한다.

 

for(i = 2; i <= number; i++)

2 ~ number 기사의 무기를 보기 위해 순회한다.

 

let count = 2;

1과 본인은 약수에 먼저 포함시킨다

(수행시간 단축을 위해서)

 

let temp = Math.sqrt(i);

for(let j = 2; j <= temp; j++)

으로 root(숫자)값 까지 순회할 수 있게

반복문을 설정한다.

(수행시간 단축을 위해 사용)

 

if(i % j === 0)
{
        if(temp === j) count++;
        else count += 2;

}

 

나누어 떨어질 때

9의 약수 : 3 같이 

중복된 수이면

나누어 떨어지게 만든 수와 몫이

같으므로 count를 1 증가시켜준다.

 

아니면 count + 2로

나누어 떨어지게 만든 수와 몫

존재하므로 count를 2 증가시켜준다.

 

if(limit < count) result += power

else result+= count

협약으로 제한 초과이면

협약된 power를 더해주고,

아닐 경우 count를 더해줘

 

필요한 강철 개수를 구한다.

 

제출한 코드 : 

 

function solution(number, limit, power) {
    let result = 1;
    for(i = 2; i <= number; i++)
    {
        let count = 2;
        let temp = Math.sqrt(i);
        for(let j = 2; j <= temp; j++)
        {
            if(i % j === 0)
            {
                if(temp === j) count++;
                else count += 2;
            }
        }
        if(limit < count) result += power
        else result+= count
    }
    
    return result
}