문제 링크
문제 해설
완전탐색법으로 풀어야 하는 문제다. 먼저 1~10000까지의 수가 셀프 넘버인지 검사할 배열을 선언한다. 이후 1부터 10000까지 모든 수에 대해 d(n)을 구하고, d(n)이 10,000 이하일 경우 배열의 d(n)번째 값을 true로 변경한다.(true는 d(n)의 생성자 n이 존재하는 경우를 뜻한다.) 이후 배열에서 값이 false인 인덱스를 모두 출력하면 된다.
Code
fun main() = with(System.out.bufferedWriter()) {
val check = BooleanArray(10001)
for (i in 1..10000) {
if (d(i) <= 10000) {
check[d(i)] = true
}
}
for (i in 1..10000) {
if (!check[i]) write("$i\n")
}
close()
}
fun d(n: Int): Int {
var sum = n
var num = n
while (num != 0) {
sum += num % 10
num /= 10
}
return sum
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 1920 : 수 찾기 (0) | 2022.11.26 |
---|---|
[Kotlin] 백준 1065 : 한수 (0) | 2022.11.25 |
[Kotlin] 백준 1064 : 평행사변형 (0) | 2022.11.24 |
[Kotlin] 백준 1010 : 다리 놓기 (1) | 2022.11.24 |
[Kotlin] 백준 1094 : 막대기 (0) | 2022.11.23 |
댓글