[작성일: 2023. 10. 12]
https://www.acmicpc.net/problem/2231
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean check = true;
for (int i = 0; i < n; i++) {
int num = i;
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
if (sum + i == n) {
System.out.println(i);
check = false;
break;
}
}
if (check) {
System.out.println(0);
}
}
}
n의 생성자는 n보다 항상 작다. 따라서 1 ~ n-1까지의 모든 숫자에 대해 분해합을 계산해서 n과 같은지 확인할 수 있다.
1부터 n-1까지 숫자 i를 선택하고(num) num의 각 자릿수의 합과 i를 더한 값을 계산한다.
만약 sum + i의 값이 n과 같다면 i는 n의 생성자가 된다.
가장 작은 생성자를 찾으면 되므로 처음에 n의 분해합을 만족하는 i를 찾게되면 break 후 반복문을 빠져나온다.
모든 숫자에 대해 분해합이 n이 되는 값을 찾지 못하면 check를 통해 0을 출력한다.