FrontEnd/프로그래머스

[JS] 기사단원의 무기

728x90

핵심은 약수의 개수를 구하는 알고리즘에 있다.

 

예를들어 100의 약수의 개수를 구한다고 생각해보자.

 

for문을 활용하여 1~100까지의 수를 모두 100에서 나누어 보는 간략한 방법이 존재할 수 있다.

 

하지만 굳이 그렇게 하지 않고 100의 루트인 10까지만 검색해도 약수의 개수를 구할 수 있다.

10까지 약수를 구한다면

 

[1,2,5,10] 이 나오는데, 그렇다면 100의 남은 약수는 방금말한 [1,2,4,10] 을 100에서 나눈 값이 된다. 즉,

 

[100,50,25,10] 이 추가적으로 100의 약수가 된다. 중복이 나오는 경우만 제거한다면 약수의 개수를 쉽게 구할 수 있다.

 

 

 

function solution(number, limit, power) {
    const lst = [ ...new Array(number) ].map((v,idx) => {
        const num = idx+1
        let cnt = 0
        for (let i=1 ; i<= num**0.5 ; i++ ){
            if (!(num%i)) {
                cnt ++
                if (num /i != i) cnt ++
            }
        }
        return cnt
    })
    const ret = lst.reduce((a,c) => c>limit ? a+power : a+c,0)
 
    return ret
}

 

 

728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 푸드파이트 대회  (0) 2023.04.09
[JS] 과일장수  (0) 2023.04.05
[JS] 명예의 전당  (0) 2023.04.03
[JS] 가장 가까운 같은 글자  (0) 2023.04.02
[JS] 크기가 작은 부분 문자열  (0) 2023.04.01