본문 바로가기
카테고리 없음

(javascript) 기사단원의 무기

by 어뇨 2024. 3. 4.

function solution(number, limit, power) {
    var answer = 0 

    for(let i = 1 ; i <= number ; i++){
        let soldier = 0       
        for(let j = 1 ; j <= Math.sqrt(i) ; j++){
           if(i % j === 0 ){
               if(i / j === j){
                   soldier++
               }else{
                   soldier += 2
               }
           }
           if(soldier > limit){
               soldier = power
               break;
           }

        }   
        answer += soldier

        }
return answer
}

 

문제를 보면 우선 약수를 찾고 그 약수의 갯수가 limit을 초과하면 2를 반환, 그게 아니라면 약수의 갯수만큼 반환 

그리고 그 반환한 값들을 더하면 된다.

 

약수의 갯수를 찾는 방법은 다른문제에서도 했듯이 Math.sqrt()를 이용하면 된다. 

약수가 되려면 i % j == 0 여야만 된다.

그리고 약수중엔 4, 9, 16, 25 처럼 특정수에 제곱을 한 수는 약수의 개수를 홀수로 가지는데 이 경우엔 조건문을 써서 

1만 더하게끔, 그 외에는 짝수를 가지기 때문에 2를 더하게끔했다. 

그리고 약수를 찾는중에 limit을 넘으면 거기서 반복문을 멈춰야하기때문에 break를 넣어서 바로 멈추게끔하고, 이럴경우엔 power를 반환해야 하기때문에 solider = power 라고하고 내부반복문을 멈추게했다.