본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 4673 : 셀프 넘버

by 개발하는 곰돌이 2022. 11. 25.

문제 링크

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net



문제 해설

완전탐색법으로 풀어야 하는 문제다. 먼저 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

댓글