
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
자꾸 각자릿수 덧셈 로직만 하고 거기서
입력받은 수 - 각자리수를 계산하고 있었다.
그래서 계속 계속 몇시간을 돌고있었다.
import java.util.*;
public class BruteForce {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 입력받는 수
int M = 0; // 생성자 저장 변수
for(int i=0; i<N; i++) {
int sum = 0;
int num = i; // 자릿수를 계산하는 변수
while(num != 0) {
sum += num % 10;
num /= 10;
}
// sum 자릿수의 합 + 각 자리수의 덧셈이 = 입력값 N이라면
if(sum + i == N) {
M = i;
break;
}
}
System.out.println(M);
sc.close();
}
}
// sum 자릿수의 합 + 각 자리수의 덧셈이 = 입력값 N이라면
if(sum + i == N) {
M = i;
break;
}
int answer = 0;
whle(N>0) {
answer += N%10;
N/=10;
}
ps. BruteForce 개념을 대충 숙지하고 푼게 가장 큰것 같다.
1~N까지 단순하고 모든 것을 다 탐색하면서 찾아보겠다는 로직으로 당연히
"for(int = 0; i<N; i++) 선언해서 (i);변수에 저장하면 되잖아!
각자리수 더하는 코드를 for문 중간에 넣고" 진짜 단순하게 생각했다.
일단 한번 더 복습하는 시간이 매우 중요하다는 생각이 들었다.
내가 쓴코드를 밥먹으면서 자기전에도 읽어주는데, 내 코드만이 정답이 아니니까...
공부가 더 필요하다. 일단 백준을 매일 푸는것도 중요한데, 내가 여태껐 풀었던 문제중에서
다시 풀어보고 싶거나 개념을 다시 다루고 싶은건 벨로그에서 다시 코드를 구현해 볼 것이다.
