끄적끄적 코딩
article thumbnail
Published 2019. 9. 1. 23:39
[C++] 백준 2231번 분해합 알고리즘
728x90

브루트 포스 문제입니다.

자연수 N이 주어졌을 때, 가장 작은 생성자를 구하는 문제입니다.
생성자는 X + (X의 요소들 각각을 더한 수) = N 인것 입니다.

예를들면
168의 경우
= 156 + 1 + 5  + 6
로 만들 수 있습니다.

여기서 168의 생성자는 156입니다. (1 + 5 + 6은 156의 각각 숫자의 합입니다.)

1부터 시작하여 각 수와, 수의 각 자리수를 전부 더한 값이 N과 같은지 비교하여
같으면 그 생성자를 출력하고, 없으면 0을 출력하게 하였습니다.

 

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
	int num;
	int sum;
	int part;

	cin >> num;

	for (int i = 1; i < num; ++i) {
		sum = i;
		part = i;

		while (part) {
			sum += part % 10;
			part /= 10;
		}

		if (num == sum) {
			cout << i << endl;
			return 0;
		}
	}

	cout << "0" << endl;

	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 1018번 체스판 다시 칠하기  (0) 2019.09.02
[C++] 백준 7568번 덩치  (0) 2019.09.02
[C++] 백준 2798번 블랙잭  (0) 2019.09.01
[C++] 백준 1002번 터렛  (0) 2019.08.31
[C++] 백준 3053번 택시 기하학  (0) 2019.08.31

검색 태그