👀 문제
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에 더한다.