[Programmers Lv.1 | JS] 기사단원의 무기

Bori·2023년 3월 9일
0

Algorithm

목록 보기
18/26
post-thumbnail

프로그래머스 기사단원의 무기 문제 링크

나의 풀이

function solution(number, limit, power) {
    const numbers = Array.from({length: number}, (_, i) => i + 1);
    const countArray = [];
    
    numbers.forEach((number) => {
        let count = 0;
        for (let i = 1; i <= Math.sqrt(number); i++) {
            if (number % i === 0) {
                count++;
                if (number / i !== i) count++;
            } 
        }
        countArray.push(count);
    })
    
    return countArray.map((count) => count > limit ? power : count).reduce((prev, curr) => prev + curr, 0);
}

문제를 풀면서

N의 약수 구하기

  • N의 약수는 N 자신을 제외하고 N / 2의 값보다 클 수 없다.
    - N / 2 까지만 반복문을 돌면서 약수 확인
    - N이 큰 숫자라면 시간 초과
  • 제곱근 사용
    • Math.sqrt() : 숫자를 인수로 전달하면 인수의 제곱근 반환
    • 1부터 N의 제곱근까지의 범위 내에서 N의 약수 확인
    • N을 위의 결과로 나온 값으로 나눈 값도 N의 약수
    • 이 중 (N / 약수) === 약수일 경우 중복인 숫자이므로 제외

⇒ 제곱근을 이용하여 약수 구하는 공식 기억하기

0개의 댓글