본문 바로가기

Study/BaekJoon

[백준 자바JAVA] 2231번 - 분해합

728x90

https://www.acmicpc.net/problem/2231


● 문제

분해합이란? 주어진 수와 주어진 수의 각자리를 더해서 나온 값이다.

예를들어 198의 분해합은 198 + 1 + 9 + 8 = 216이 된다.


● 코드

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		int n = s.nextInt();
		int result = 0;
		
		for(int i = 0; i < n; i++)
		{
			int sum = 0;
			int num = i;
			
			while(num != 0) {
				sum += num % 10;
				num = num / 10;
			}

			
			if(sum + i == n) {
				result = i;
				break;
			}
		}
		
		System.out.println(result);

	}
}

해당 문제를 보고 분해합에관한 공식이 따로 있나 찾아보았지만 나오는게 없어 1부터 입력한 값 n까지 모든 수를 비교해준 뒤 나오는 값 중 최솟값을 출력을 하였다.

 

먼저 자연수N을 입력을 받은 뒤

for문을 이용하여 N까지 모든 숫자를 분해합을 돌려주었다.

 

while문을 이용하여 각자리 숫자를 더한 뒤 sum에 저장해 주고 sum과 i를 더해준 값이 n 과 같을 경우 그 숫자는 생성자가 된다.

이를 비교하여 가장 작은 생성자를 출력해준다.


728x90