TLI/코드카타
2024.05.23 TIL 코트카타 60번(기사단원의 무기)
jaeseonyoo
2024. 5. 23. 18:17
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의 범위만큼 전부 약수의 개수를 확인하고 문제의 조건의 맞게 강철의 개수를 계산해주면 된다.