🟦/백준

[실버 5] 셀프 넘버

진뚱이용 2023. 5. 26. 15:38

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

n: 생성자

d(n) : 결과물

 

셀프 넘버는 d(n)인데 만족하는 n이 없다

 

그럼 n으로 모두 구하고 안 구해진 게 셀프 넘버겠구나

import java.util.*;
import java.io.*;

class Main {
    public static void main(String[] args) {
        // d(n)이 되는 숫자면 d(n)=index이고 true처리
        boolean[] visited = new boolean[10001];

        for (int i = 1; i <= 10000; i++) {
            // i를 조작 할 시 for문 깨짐
            int number = i;
            // 자기 자신 더하기
            int sum = number;
            while (true) {
                // 끝자리 더하기
                sum += number % 10;
                // 한자리면 멈춤
                if (number < 10)
                    break;
                // 끝자리 앞에서 숫자 자르기
                number /= 10;
            }
            // 범위 넘는거 조심
            if (sum <= 10000)
                visited[sum] = true;
        }

        for (int i = 1; i <= 10000; i++) {
            // false면 생성자로 만들지 못한 셀프넘버다
            if (!visited[i])
                System.out.println(i);
        }
    }
}