min

프로그래머스 기사단원의 무기 자바스크립트 본문

알고리즘

프로그래머스 기사단원의 무기 자바스크립트

minprogramming 2023. 8. 18. 06:36

<문제>

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

<나의 풀이>

//1~number까지의 반복문을 돌면서 다음 과정을 수행한다.
//각 단계마다 약수의 갯수를 구한다.
//약수의 갯수가 limit를 넘는지 아닌지를 확인한다.
//만약 약수의 갯수가 limit를 넘는다면 power를 answer에 더한다.
//만약 약수의 갯수가 limit를 넘지 않는다면 약수의 갯수를 answer에 더한다.
//answer를 리턴한다.

function 약수갯수함수(num) {
    let result = 0
    for(let i = 1; i*i <= num; i++) {
        if(i * i == num) result++;
        else if(num % i == 0) result += 2
    }
    return result;
}

function solution(number, limit, power) {
    var answer = 0;
    for(let i = 1; i <= number; i++) {
        let len = 약수갯수함수(i)
        if(len <= limit) answer += len
        else answer += power
    }
    return answer;
}

 

<다른 사람의 풀이>

 

function solution(number, limit, power) {
    var answer = 0;
    for (let n = 1; n <= number; n++)
    {
        let count = 0;
        for (let j = 1; j * j <= n; j++)
        {
            if (j * j == n) count++;
            else if (n % j == 0) count += 2;
        }
        if (count > limit) count = power;
        answer += count;
    }
    return answer;
}

 

 

<참고자료>

효율적인 약수 알고리즘

https://devmoony.tistory.com/169

 

[Java] 약수의 개수 구하는 최적의 방법(알고리즘)

Java - 약수의 개수 구하기 (최적의 방법) 최근에 코딩테스트 문제를 풀다가 약수의 개수 관련해서 로직을 작성한 기억이 많다. 그러다 기본적인 방법 외에 조금 더 효율적으로 약수의 개수를 구

devmoony.tistory.com