티스토리 뷰

 

2022.11.23

프로그래머스 스쿨 Lv01. 기사단원의 무기 


 

프로그래머스

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

programmers.co.kr

 

🚀 문제 파악

* 1 ~ number 까지의 기사 번호

* 기사 번호의 약수 개수 = 구매 가능한 무기의 공격력 (예) 기사번호 = 3 / 약수는 2개(1,3) / 공격력은 2 

* 무기 공격력 제한 수치 >= 구매 가능한 무기 공격력 인 경우 문제없이 무기 구매 가능

* 무기 공격력 제한 수치 < 구매 가능한 무기 공격력 인 경우  지정 공격력의 무기를 구매해야 함

* 무기 공격력 제한 수치는 limit

* 지정 공격력은 power 

* 공격력 1마다 1kg의 철 필요 

* 모든 기사단원의 무기를 위한 철의 무게는?

 

 

🚀 문제 해결

1. 먼저 공격력에 해당하는 약수의 개수를 구한다. 

    * 약수의 개수를 구하는 방법은 소수를 구할 때 사용한 제곱근 방식에서 착안

    * 나누는 수와 몫이 같은 경우는 약수 개수 +1   (예) 4 /2 = 2 인 경우, 알 수 있는 약수는 2 하나

    * 나누는 수와 몫이 다른 경우는 약수 개수 +2   (예) 6 /2 = 3 인 경우, 알 수 있는 약수는 2,3 총 2개 

    * [참고. 소수를 구하는 방법(2) 제곱근의 이용] https://dev-ku.tistory.com/278 

2. 제한 수치(limit) 와 비교, 구매 가능한 공격력의 무기 확인

3. 모든 기사의 공격력을 answer에 더하고 최종 반환

 

 

🚀 통과 코드

function solution(number, limit, power) {
    var answer = 0;
    for(var i = 1; i <= number; i++) {
        // 약수 개수 구하기 위해 제곱근 구하기
        var sqrt = Math.round(Math.sqrt(i));
        var attack = 0; // 권장 공격력 = 약수 개수
        // 약수 개수 구하기 = 공격력 구하기
        for(var j = 1; j <= sqrt; j++){
            if(i%j == 0){
                if(i/j==j) attack+=1;  // 약수 1개 (예) 4/2=2, 2 
                else attack+=2;        // 약수 2개 (예) 6/2=3, 2와 3
            }
        }
        // 제한 수치 적합 확인
        if(limit >= attack) answer += attack
        else answer += power
    }
    return answer;
}

 

 

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday