smooth waters run deep

1d-1c/BOJ

2231_분배합 (JAVA)

yeon_11 2020. 10. 21. 23:10
 

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