2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int ans = 0;
for(int i=1; i<=N; i++){
int sum = makeSum(i) + i;
if(sum == N){
ans = i;
break;
}
}
System.out.println(ans);
}
public static int makeSum(int n){ //분배합 계산
int sum = 0;
while(n > 0){
sum += n%10;
n /= 10;
}
return sum;
}
}
분배합과 생성자의 개념이 헷갈렸다. 정리하자면 다음과 같다.
10 -> 10+1 = 11 의 방법으로 분배합을 계산하고, "11의 생성자 = 10" 이 된다.
[문제 풀이 생각 과정]
1. N의 생성자를 찾아야 하므로, 분배합=N이 되는 숫자를 찾는 방법으로 구현했다. ( 왜냐면 Bruteforce 라길래 ㅎㅎ!)
i=1 부터 N까지 makeSum(i)를 통해 분배합을 계산한다. (각 자리수를 더하는 과정! 자기자신 더하기전)
2. makeSum(i) 결과에 자기자신i를 더하여 분배합 계산을 마무리하고,
분배합 결과가 N이 되면 ans값을 바꾸어준다.
3. 만약 생성자가 없다면, ans=0을 유지하기 때문에 그대로 ans를 출력해준다.
'1d-1c > BOJ' 카테고리의 다른 글
1697_숨바꼭질 (JAVA) (0) | 2020.10.23 |
---|---|
7568_덩치 (JAVA) (0) | 2020.10.22 |
3053_택시 기하학 (JAVA) (0) | 2020.10.21 |
4153_직각삼각형 (JAVA) (0) | 2020.10.21 |
3009_네 번째 점 (JAVA) (0) | 2020.10.21 |