728x90

# 출처 : https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

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

www.acmicpc.net


# 문제

주어진 수의 범위에 해당하는 셀프넘버를 출력하는 프로그램


# 풀이

d(n) = n + n의 각 자리수

n, d(n), d(d(n)), d(d(d(n))), ... 과 같이 무한 수열을 만들 수 있다.

n을 d(n)의 생성자라고 한다면, d(d(n))의 생성자는 d(n)이 된다는 것을 알 수 있다.

더보기

n=33

d(n)=33+3+3=39

d(d(n))=39+3+9=51

...

39의 생성자는 33, 51의 생성자는 39, ....

 

여기서 셀프 넘버란 생성자가 없는 숫자를 의미한다.


# 코드

public class Main {
    static final int NUM = 10001;
    static final int TEN = 10;

    public static void main(String[] args) {
        boolean[] numbers = new boolean[NUM]; // false로 자동으로 초기화
        for(int i=1; i<NUM; i++){
            int num = divice(i);
            if(num>NUM-1) continue;
            numbers[num] = true;
        }

        for(int i=1; i<NUM; i++){
            if(numbers[i]) continue; // true라면 셀프넘버
            System.out.println(i);
        }
    }

    public static int divice(int num) {
        int sum = num;
        while(num >= TEN){
            sum += num % TEN;
            num /= TEN;
        }
        return sum+num;
    }
 }
728x90

'algorithm > baekjoon' 카테고리의 다른 글

[BOJ] 2446 별 찍기-9 (Java)  (0) 2022.09.29
[BOJ] 1978 소수 찾기 (Java)  (2) 2022.06.28
[BOJ] 2447 별찍기-10 (python)  (0) 2021.09.29
[BOJ] 5557 1학년 (python)  (0) 2021.09.29
[BOJ] 11052 카드 구매하기 (python)  (0) 2021.09.29

+ Recent posts