본문 바로가기
알고리즘

[프로그래머스] 기사단원의 무기

by limew 2023. 6. 7.

https://school.programmers.co.kr/learn/courses/30/lessons/136798

 

 

첫번째 => 시간초과

function getDivisionsLength(n) {
    return new Array(n).fill(0).map((e, index) => index+1).filter(e => n%e === 0).length;
}

function solution(number, limit, power) {
    var answer = 0;
    const divisions = [];
    // 약수들 구하기
    for (let i = 1; i <= number; i++) {
        divisions.push(getDivisionsLength(i));
    }
    
    // limit 넘지않게 총 무게구하기
    answer = divisions.reduce((acc, curr) => {
        return acc + ((curr > limit) ? power : curr);
    }, 0);
    return answer;
}

 

 

  • 약수 구할때 n/2초과는 확인할 필요없다
  • 자기자신은 약수이므로 +1
function getDivisionsLength(n) {
    let count = 0;
    for (let i = 1; i <= n/2; i++) {
        if (n % i === 0) {
            count++;
        }
    }
    return ++count; // 자기자신도 약수임
}