단계별로 풀어보기 > 브루트 포스 > 분해합
https://www.acmicpc.net/problem/2231
%분해합 : 자연수 N이 주어질 때, N과 N을 이루는 각 자리수의 합
%생성자 : 분해합이 자연수 N이 되는 자연수
어떤 자연수 N이 주어질 때, 가장 작은 생성자 M을 return하라.

1부터 시작하여 계속해서 자연수의 각 자리수 + 자연수를 더해서 그 값이 주어진 값이 맞는가 확인하면 된다.
String의 length()를 이용하여 푼 풀이
import java.io.*;
public class 분해합 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int M = 0;
for(int i = 1; i<N; i++){
int length = String.valueOf(i).length(); // 계산할 i의 자릿수
int sum = i;
for(int j = 0; j<length; j++){
int nextNum =Integer.parseInt(String.valueOf(String.valueOf(i).charAt(j)));
sum += nextNum;
}
if(sum == N){
M = i;
break;
}
}
bw.write(String.valueOf(M));
bw.flush();
bw.close();
br.close();
}
}
i를 10씩 나누어 나머지를 확인하여 계산한 풀이
import java.io.*;
public class 분해합_divide {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int M = 0;
for(int i = 1; i<N; i++){
int length = String.valueOf(i).length();
int num = i;
int sum = num;
for(int j = 0; j<length; j++){
int divNum = num % 10;
sum += divNum;
num /= 10;
}
if(sum == N){
M = i;
break;
}
}
bw.write(String.valueOf(M));
bw.flush();
bw.close();
br.close();
}
}
Review
import java.io.*;
public class 분해합_review {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int M = 0;
for(int i = 1; i<N; i++){
int sum = i;
int num = i;
while(num > 0){
sum += num % 10;
num /= 10;
}
if(sum == N){
M = i;
break;
}
}
bw.write(String.valueOf(M));
bw.flush();
bw.close();
br.close();
}
}
각자리수를 더한다는 것을 너무 어렵게 생각했다.
간단하게 i에 10으로 나눈 나머지를 확인하고, i를 다시 10으로 나눈 몫을 저장하면 된다.


Review
