입력 코드
#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
문제 출처
'C' 카테고리의 다른 글
#48. [백준_C언어] 5086 : 배수와 약수 (0) | 2021.01.25 |
---|---|
#47. [백준_C언어] 2750 : 수 정렬하기 (0) | 2021.01.25 |
#45. [백준_C언어] 10870 : 피보나치 수 5 (0) | 2021.01.23 |
#44. [백준_C언어] 10872 : 팩토리얼 (0) | 2021.01.22 |
#43. [백준_C언어] 3053 : 택시 기하학 (0) | 2021.01.22 |