[백준 C] 4673 : 셀프 넘버

anfruf·2022년 6월 7일

백준 C언어

목록 보기
43/62
  1. C언어 : 함수(2)

08.JUN.2022

문제 : 함수

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 
d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 
= 87이다. 생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 
13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97. 10000보다 작거나 
같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

개념이 잘 이해되지 않아 찾아보았다.
우선 d(n)에 1을 대입해 보면 자기 자신인 1, 자리수의 경우에는 1밖에 없으니 1을 더해 2가 생성된다. 다음 2를 대입해 보면 자기 자신인 2, 자리수 2를 더해 4가 생성되는데, 이때문에 1,3,5 같은 숫자들이 셀프 넘버라고 정의되어 있는 것이다.

문제 풀이

#include <stdio.h>

// 함수 부분 
int check(int n) 
{
	int num = n;

	while (n > 0) 
	{
		num += n % 10; // 자기 자신 + 자리수 
		n /= 10;
	}
	return num;
}

// main
int main()
{
    int arr[10000]={0, }; // 문제에 범위 제시
	for (int i = 0; i <= 10000; i++)
	{
		if (check(i) <= 10000) 
			arr[check(i)] = 1; 
	}
	for (int i = 0; i <= 10000; i++)
	{
		if (arr[i] != 1)
			printf("%d\n", i);
	}
	return 0;
}

0개의 댓글