#46. [백준_C언어] 2231 : 분해합

 

 입력 코드 

#include <stdio.h>

int main()
{
	int N;

	scanf("%d", &N);

	for (int i = 1; i < N; i++){
		int temp = i;
		int num = i;

		while (temp > 0){
			num += temp % 10;
			temp /= 10;
		}

		if (num == N){
			printf("%d", i);
			N = 0;
			break;
		}
	}

	if (N != 0)
		printf("0");
}

 

 코드 설명 

#브루트포스 알고리즘

#include <stdio.h>

int main()
{
	int N;

	scanf("%d", &N);

	for (int i = 1; i < N; i++){
		int temp = i;
		int num = i;

		while (temp > 0){
			num += temp % 10;
			temp /= 10;
		}

		if (num == N){
			printf("%d", i);
			N = 0;
			break;
		}
	}

	if (N != 0)
		printf("0");
}

 

분해합이 주어졌을 때 그 생성자를 역으로 찾을 수는 없다. (생성자가 여러개일수도 있기 때문)

 

N의 분해합은 무조건 N보다 크기 때문에 1부터 (N-1)까지 분해합을 찾는 함수를 돌리면서

 

가장 처음 N의 분해합이 구해지면 그 때의 생성자가 N의 가장 작은 생성자이므로 출력하고,

 

(N-1)까지 분해합이 구해지지 않으면 0을 출력하는 원리이다.

 

 

 

※ 참고 : 2021/01/08 - [C] - #19. [백준_C언어] 2798 : 블랙잭

 

 

참고한 사이트

velog.io/@charlieppark/%EB%B0%B1%EC%A4%80-2231%EB%B2%88

 

백준 2231번

TIL 20201005

velog.io

 

itadventure.tistory.com/158

 

백준 2231. 분해합 문제 풀이

백준 2231. 분해합 문제 풀이 "분해합"이라는 수학용어가 있습니다. 어떤 자연수 N을 N과 각 자릿수를 1의 자리로 하여 합산한 수를 분해합이라고 하는데요. 이를테면 123 이란 숫자의 분해합은 123 +

itadventure.tistory.com

 

 

 

 

 문제 출처 

www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net