d(n) = n + n의 각 자리수이고
n은 d(n)의 생성자라고 부를 때
생성자가 없는 숫자를 셀프 넘버라고 부른다
10,000보다 작거나 같은 셀프넘버를 구해야 한다.
없음
10,000보다 작은 모든 셀프넘버를 출력
에라토스테네스의 채와 비슷한 느낌으로 하면 된다.
에라토스테네스의 채 설명 글
에라토스테네스의 채는 소수를 걸러내는 알고리즘인데, 2부터 시작해 현재 수의 모든 배수를 걸러내는 방식이다. 걸러지고 남은 수들은 모두 소수이다.
이 문제에서는 1부터 10,000까지 생성자로 다음 순열을 구해 visited 체크 해 주면 된다.
//셀프 넘버
public class Main {
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
visited = new boolean[10001];
for(int i=1; i<=10000; i++) {
int start = i;
start = next(start);
if(start >= 10000) continue;
visited[start] = true;
}
for(int i=1; i<10000; i++) {
if(visited[i]) continue;
bw.write(i + "\n");
}
bw.flush();
bw.close();
}
static int next(int start) {
int result = start;
while(start > 0) {
result += start%10;
start = start/10;
}
return result;
}
}