👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/136798
👊 도전
1. 설계
- 문제 설명대로 구현
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import kotlin.math.roundToInt
class Solution {
fun solution(number: Int, limit: Int, power: Int): Int {
var answer: Int = 0
/**
* 1부터 num까지
* 약수 개수 > limit면 power, 아니면 약수개수를 answer에 추가
*/
(1..number).forEach { num ->
val result = calculate(num)
if (result > limit) answer += power
else answer += result
}
return answer
}
    fun calculate(num: Int): Int {
        val sqrt = Math.sqrt(num.toDouble()).roundToInt()
        val set = hashSetOf<Int>()
        (1..sqrt).forEach { i ->
            if (num % i == 0) {
                set.add(i)
                if (i != num / i) set.add(num / i)
            }
        }
        return set.size
    }
}
3. 결과
 🤟 성공 🤟
🤟 성공 🤟
4. 설명
- 제곱근을 이용하여 약수 개수를 구한다
    - 1~sqrt(n)까지 순회하며 num %i == 0인 것과, 그럴 경우 i != num / i인 것을 hashSet에 저장하여 약수를 구한다.
- 약수 개수가 limit보다 크면 power을, 아니라면 약수 개수를 answer에 더한다.