알고리즘/문제풀이

2231 - 분해합(백준)

WhNi 2024. 6. 5. 12:13

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

 

#include <iostream>


using namespace std;

// 분해합 과정이 복잡할거 같아서 함수로 따로 설정
int Sum(int num)
{
	int sum = num;

	while (num > 0)
	{
    	// 자릿수 나머지 값 
		sum += num % 10;
        // 자릿수 빼기
		num /= 10;
	}
	return sum;
}

int main()
{
	int N;

	cin >> N;

	// 없으면 0 출력해야해서 0부터 시작
	int result = 0;

	// 각 자리수의 가장 큰 숫자9에, 가장 큰 자릿수 1,000,000 의 6 을 곱한 값으로 시작값 구하기
	int start = N - 54;

	// 시작값으로부터 입력값 까지 돌면서, 가장 작은 생성자 찾기
	for (int M = start; M < N; M++)
	{
    	// 분해합 결과값이 입력값과 같으면 
		if (Sum(M) == N)
		{
        // 가장 작은 생성자
			result = M;
			break;
		}
	}
	cout << result << "\n";

	return 0;
};