Programmers js - 기사단원의 무기

박요셉·2024년 5월 29일
0

Programmers.Js

목록 보기
20/26
post-custom-banner

내 초기 코드인데 각 약수를 구함에 있어 최대 수까지 반복을 돌려버려서 그런듯

function solution(number, limit, power) {
    const measureNumber = getMeasureNumber(number)
    const answer = measureNumber.reduce((acc,cur) => { return cur <= limit ? acc + cur : acc + power} , 0)
    return answer;
}


function getMeasureNumber (number){
    const result = [] 
    for(let i = 1; i <= number ; i ++){ 
        const arr = []
        for ( let j = 1 ; j <= number ; j ++){
           i % j === 0 ? arr.push(j) : null
        }
        result.push(arr.length)
    }
    return result
}

고럼 제곱근으로 다시 풀어야지..?

function solution(number, limit, power) {
    const measureNumber = getMeasureNumber(number)
    const answer = measureNumber.reduce((acc,cur) => { return cur <= limit ? acc + cur : acc + power} , 0)
    return answer;
}


function getMeasureNumber (number){
    let result = []
    for(let i = 1; i <= number ; i ++){ 
        let count = 0
        for ( let j = 1 ; j * j <= i ; j ++){
           if(i % j === 0){
               count++
               if(j !== i / j){
                   count++
               }
           }
        }
        result.push(count)
    }
    return result
}

제곱근까지만 계산을 해서 i = 36이고 j = 6이라는 가정 하에 i/j를 하면 6이 나올텐데 6일 경우 앞에서 한번 count에 ++을 해주었기 때문에 해주면 안됨
즉 i = 36 j = 3이면 i / j 가 12이기에 3과 12가 약수로 들어가야되므로 count++을 두번 해주는거임

profile
개발자 지망생
post-custom-banner

0개의 댓글