생성자 존재 여부 체크를 위한 리스트/배열을 생성한다.
생성자가 존재하면 셀프 넘버가 아니므로 리스트를 True로 초기화한다.
for문을 돌며 해당 수로 부터 생성된 수에 해당하는 리스트값을 False로 변경해준다.
ex) 33 + 3 + 3 = 39 이므로 39는 33이라는 생성자가 존재하므로 39는 True->False
이때 10000보다 작거나 같은 셀프 넘버를 구해야 하므로, 생성된 수가 10001보다 작은지 체크해줘야한다.
for문이 종료되면 True인 리스트 요소의 index를 출력해준다.
python 코드
if __name__ == '__main__':
def is_selfnumber(n):
N = [int(i) for i in str(n)]
return n+sum(N)
check = [True]*10001
for i in range(10000):
tmp = is_selfnumber(i+1)
if tmp < 10001:
check[tmp] = False
for i in range(1, 10001):
if check[i]:
print(i)
java 코드
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
boolean[] check = new boolean[10001];
Arrays.fill(check,true);
for(int i = 0; i<10000;i++){
int tmp = is_Selfnumber(i+1);
if(tmp<10001)
check[tmp] = false;
}
for(int i = 1;i<10001;i++){
if(check[i])
System.out.println(i);
}
}
public static int is_Selfnumber(int n){
int N = n;
while(n>0){
N += n%10;
n /=10;
}
return N;
}
}