알고리즘/백준(BOJ)

백준 2231번 분해합

오뚜깅 2021. 1. 11. 23:11
반응형

분해합 문제는 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하는 문제이다.

 

최소의 문제를 구하는 문제이기 때문에 정수 1부터 시작해서 생성자를 구해서 최초의 생성자가 나오면 종료하면 된다.

#include <iostream>

using namespace std;

int main() {
	int N;

	cin >> N;

	int num = 0;
	for (int i = 1; i < N; i++) {
		int sum = 0;
		int temp = i;
		while (temp >= 1) {
			sum += temp % 10;
			temp /= 10;
		}

		if (sum + i == N) {
			num = i;
			break;
		}		
	}
	
	cout << num;

	return 0;
}
반응형