주어진 자연수 N이 최대 1000000까지이므로 이를 고려하여 각 자릿수를 구하는 함수를 작성했다.
분해합은 자신과 분해된 자릿수들의 합이므로 어차피 생성자는 주어진 분해합인 N보다 작을 수 밖에 없다.
따라서 1부터 N미만까지 차례대로 생성자가 될 수 있을지 대조했을 때, 처음으로 생성자가 되는 수가 가장 작은 생성자가 될 것이다.
import java.util.Scanner;
public class Main {
int DisassembleSum(int N) {
for(int i=0; i<N; i++) {
int m1 = i/1000000;
int m2 = (i-m1*1000000)/100000;
int m3 = (i-m1*1000000-m2*100000)/10000;
int m4 = (i-m1*1000000-m2*100000-m3*10000)/1000;
int m5 = (i-m1*1000000-m2*100000-m3*10000-m4*1000)/100;
int m6 = (i-m1*1000000-m2*100000-m3*10000-m4*1000-m5*100)/10;
int m7 = i-m1*1000000-m2*100000-m3*10000-m4*1000-m5*100-m6*10;
int sum = i + m1+m2+m3+m4+m5+m6+m7;
if(sum==N)
return i;
}
return 0;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Main Main = new Main();
int N = scanner.nextInt();
System.out.println(Main.DisassembleSum(N));
scanner.close();
}
}