본문 바로가기

Algorithm/Practice

Programmers - 기사단원의 무기 with JAVA

 

문제

1번부터 N번까지 번호를 가진 기사들이 존재하고 각 번호의 약수의 개수만큼의 파워를 가진 무기를 소유가능하다. 하지만 limit보다 약수의 개수가 크다면 해당 기사는 power 크기의 무게만 가질 수 있을 때, 각 기사들의 무기 파워의 합은?

 

 

 

로직

1. 각 번호들의 약수의 개수를 구한다.

(약수의 개수를 구하는 가장 효율적인 알고리즘은 해당 수의 제곱근까지만 체크하는 방법이다.)

2. limit보다 크면 power, 작으면 count를 answer에 더한다.

 

 

 

 

코드

import java.util.*;
class Solution {
    public int solution(int number, int limit, int power) {
        int answer = 1;
        for(int i=2; i<=number; i++){
            int count = 0;
            for(int j=1; j<=Math.sqrt(i); j++){
                if(i%j == 0){
                    if(j*j == i){
                        count += 1;
                    }
                    else{
                        count += 2;
                    }
                }
                if(count > limit){
                    answer += power;
                    break;
                }
            }
            if(count <= limit){
                answer += count;   
            }
        }        
        return answer;
    }
}