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);
}
}
}