본문 바로가기

TLI/코드카타

2024.05.23 TIL 코트카타 60번(기사단원의 무기)

class Solution {
    fun solution(number: Int, limit: Int, power: Int): Int {
        var answer: Int = 0

        for(night in 1..number) {
            var numYaksu = calculateNumYaksu(night)
            if(numYaksu > limit) {
                answer += power
                continue
            }
            answer+= numYaksu
        }

        return answer
    }
    
    fun calculateNumYaksu(number: Int): Int {

        var numYaksu = 0

        var numberSqrt = Math.sqrt(number.toDouble())
        for(maybeYaksu in 1..numberSqrt.toInt()) {
            if(number % maybeYaksu == 0)
                numYaksu++
        }
        numYaksu *= 2

        if(numberSqrt - numberSqrt.toInt() == 0.0)
            numYaksu--

        return numYaksu
    }
}

 

포인트

- 58번(소수만들기)에서 사용한 제곱근까지 확인하는 방법을 응용한다.

 

약수의 개수 확인하는 방법

1. 제곱근을 확인한다.

2. 제곱근 까지(내림한 수) 약수가 있는지 카운트한다.

3. 카운트한 수 X2를 해준다.

4. 완전제곱수인 경우 하나 빼준다.(같은 경우가 한 번더 카운트 됐기 때문에)

ex) 4의 경우

4x1, 2x2까지 확인하지만 대칭되는 부분에 2x2 1x4로 2x2가 한 번더 카운트 되기 때문에 빼줘야 한다.

 

n의 범위만큼 전부 약수의 개수를 확인하고 문제의 조건의 맞게 강철의 개수를 계산해주면 된다.