입력 코드
#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
백준 2231. 분해합 문제 풀이
백준 2231. 분해합 문제 풀이 "분해합"이라는 수학용어가 있습니다. 어떤 자연수 N을 N과 각 자릿수를 1의 자리로 하여 합산한 수를 분해합이라고 하는데요. 이를테면 123 이란 숫자의 분해합은 123 +
itadventure.tistory.com
문제 출처
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
'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 |