
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// 성자를 찾지 못했을 때를 대비해 answer 변수를 0으로 초기화
int answer = 0;
for (int i = 1; i < N; i++) {
int sum = i;
int temp = i;
while (temp > 0) {
sum += temp % 10;
temp /= 10;
}
if (sum == N) {
answer = i;
break; // 가장 작은 생성자를 찾았으므로 반복을 종료
}
}
System.out.println(answer);
}
}
생성자 찾기: 1부터 N-1까지 모든 수에 대해 반복문을 실행한다.
각 수를 생성자 후보(i)로 가정하고, 생성자인지 확인한다.
분해합 계산: 생성자 후보 i와 그 수의 각 자릿수를 더해 sum 변수에 저장한다.
이를 위해, temp 변수에 i를 복사하고, temp가 0보다 큰 동안 temp의 마지막 자릿수를 sum에 더하고 temp를 10으로 나누어 다음 자릿수로 넘어간다. 이 과정을 통해 i의 각 자릿수의 합을 i에 더한 분해합을 계산한다.
생성자 확인: 계산된 sum이 입력받은 N과 같다면, i는 N의 생성자다.
이때, answer에 i를 저장하고 반복문을 종료(break)한다.
반복문을 종료하는 것은 N의 생성자 중 가장 작은 값을 찾기 위함입니다.