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 |