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의 범위만큼 전부 약수의 개수를 확인하고 문제의 조건의 맞게 강철의 개수를 계산해주면 된다.
'TLI > 코드카타' 카테고리의 다른 글
2024.05.27 내일배움캠프 Android 4기를 시작하며 (0) | 2024.05.27 |
---|---|
2024.05.24 TIL 코트카타 61번(로또의 최고 순위와 최저 순위) (0) | 2024.05.24 |
2024.05.23 TIL 코트카타 59번(덧칠하기) (1) | 2024.05.23 |
2024.05.21 TIL 코트카타 58번(소수 만들기) (0) | 2024.05.21 |
2024.05.20 TIL 코트카타 57번(모의고사) (0) | 2024.05.20 |