코딩/백준 문제 (브론즈)
[백준/2231/C언어] 분해합 _ 풀이
룻밤
2023. 9. 3. 12:53
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
풀이
#include <stdio.h>
int reverse(int n) {;
int i = 1; // i = i~n-1까지 가능
while (i <= n) {
int sum = 0; //초기화
int c = i; // i의 각 자릿수
while (c > 1) { // c가 1 초과일때 반복
sum += c % 10; // c%10 = 각자리수
c = c / 10;
}
sum += c; // c가 1일때 sum에 더함
sum += i; // 분해합 공식
// sum값이 n과 같을때가 가장 작은 생성자
if (sum == n) return i;
// i과 n과 같다면(생성자 없음) 0출력
else if (i == n) return 0;
i++;
}
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
분해합을 입력 받았을때 생성자를 구할수 있는 공식은 없다.
그렇지만 분해합 n보다 생성자는 무조건 작기 때문에
1~n-1까지 생성자라 가정하고 분해합 공식을 구현해 처음 n과 같은 생성자를 출력하면 된다.