브루트 포스를 이용하여 푸는 문제이다.
문제 자체는 매우 간단하다. 그냥 1부터 +1씩 증가시키면서 분해합과 N을 비교한 후 분해합이 N과 같으면 생성자를 출력하고 만약 생성자가 존재하지 않으면 0을 출력하면 되는 문제이다.
하지만 한가지 신경써야 하는 부분이 있었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
int answer = 0;
while(true) {
answer++;
int decomposition = sum(answer);
if(decomposition == N) {
break;
}
if(answer > N) {
answer = 0;
break;
}
}
System.out.println(answer);
}
static int sum(int answer) {
int temp = answer;
int digitSum = 0;
while(answer > 0) {
digitSum += answer % 10;
answer /= 10;
}
return digitSum + temp;
}
}
while(true) {
answer++;
int decomposition = sum(answer);
if(decomposition == N) {
break;
}
if(answer > N) {
answer = 0;
break;
}
}
여기에서 자연수 N과 비교해야 하는 값 설정에 주의를 해야했다.
예를 들어 N = 17일때 정답은 13으로 17 = 13 + 1 + 3 이다.
그러나 17과 분해합을 비교를 한다면 answer이 9일때
분해합 = 9 + 9
17 < 분해합
이 되어버려 루프문이 예상보다 일찍 끝나게 된다.