import kotlin.math.sqrt
class Solution(){
fun solution(number: Int, limit: Int, power: Int): Int {
var answer: Int = 0
var overpower = mutableListOf<Int>()
var countList = (1..number).map {
countDivider(it)
}.toList()
countList.forEach { count ->
if (count > limit) {
overpower.add(power)
} else {
overpower.add(count)
}
}
for (i in overpower) {
answer += i
}
return answer
}
private fun countDivider(number: Int): Int {
var count = 0
val temp = sqrt(number.toDouble()).toInt() // sqrt(k)는, f(x) = x^2 - k = 0의 근
for (l in 1..temp) {
if (number % l == 0) {
if (l * l == number) {
count++
} else {
count += 2
}
}
}
return count
}
}
이 문제는 일반적인 약수를 구하는 방법인 나머지 연산을 통해 구하면 time over 된다.
제곱근 함수를 이용하면 보다 빠르게 계산이 가능하여 pass 할 수 있다!
'코테 > 프로그래머스' 카테고리의 다른 글
포켓몬 Java 풀이 (0) | 2023.05.04 |
---|---|
완주하지 못한 선수 Java 풀이 (0) | 2023.05.04 |
2023 KAKAO BLIND RECRUITMENT 개인정보 수집 유효기간 (Java.ver) (0) | 2023.05.03 |
[PCCP모의고사] 외톨이 알파벳 (Java ver.) (0) | 2022.12.16 |
[프로그래머스 Lv.2] 카펫 (kotlin ver.) (0) | 2022.12.14 |