본문 바로가기

알고리즘

[백준 2231] 분해합

www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

이문제는 최대로 더해 질 수 있는수가 999999 로 9*6인 54이다.

그래서 54보다 작은 수에서 시작해서 brute force로 탐색해서 풀면 된다.

 

코드는 다음과 같다.

//분해합
#include<iostream>
#include<string>

using namespace std;

int main(void)
{
	int n = 0;
	int nAns = 0;
	int nLen = 0;
	string strTmp;

	cin >> n;
	
	nLen = to_string(n).length();
	
	for(int t = n - 54; t < n; t++) 	// 6 * maxnum(9) = 54
	{
		int nTmp = t;
		int nCom = t;

		for(int i = 0; i < nLen; i++)
		{	
			nCom += (nTmp % 10);
			nTmp /= 10;
		}
		
		if(nCom == n)
		{
			nAns = t;
			break;
		}
	}

	cout << nAns << endl;

	return 0;
}

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

[백준 11060] 점프 점프  (0) 2020.11.19
[백준 19598] 최소 회의실 개수  (1) 2020.11.01
[백준 4848] 집합 숫자 표기법  (0) 2020.11.01
[백준 16953] A > B  (2) 2020.10.16
[백준 11729] 하노이 탑 이동 순서  (0) 2020.10.15