본문 바로가기

programming/알고리즘 풀이

백준 -4673번 [C/C++/Python] - 함수 셀프넘버

반응형
SMALL

N > 0 , D[N] 생성자 ,  // 생성자가 없는 수는 셀프넘버임 -> 100이하의 셀프넘버는 13개가 존재함 

 

D[n] -> n + n/10 + n%10 

n = d[n]-n/10 -n%10

 

ex ) 75 + 7 +5 = 87 -> 87+8+7 -> 102 -> 102+1+0+2 

 

1. 생성자 n -> 1~10000으로 수열 D[N]을 구성.

2. D[n]은 dn += n%10 , n = n/10 의 반복으로 획득 -> n = 0 이거나 n < 0까지 반복 ,

3. D[N]=X 의 값을 인덱스로 사용하요 D[X]=1로 체크 

4 D[N] = 0 인경우 출력 

 

C

#include <stdio.h>
#define limite 10000
#define max_dn 10035
#define check 1
#define non_check 0

int make_dn(int num);

int main()
{

    int i= 0;
    int d[max_dn] = { 0, };
    int reg = 0;

    for( i =1 ; i<=limite ; i++)
    {    
        reg= make_dn(i);
        d[reg] = check;
    }

    for( i =1; i<= limite ; i++)
    {
        if( d[i] == non_check ) printf("%d\n", i);
    }
    return 0;
}

int make_dn(int num)
{
    int sum =num;
    while(num>0)
    {
        sum += num%10;
        num = num/10;
    }
    return sum;
}

C++

#include <iostream>

#define limite 10000
#define max_dn 10035
#define check 1
#define non_check 0

using namespace std;

int make_dn(int num);

int main()
{

    int i= 0;
    int d[max_dn] = { 0, };
    int reg = 0;

    for( i =1 ; i<=limite ; i++)
    {    
        reg= make_dn(i);
        d[reg] = check;
    }

    for( i =1; i<= limite ; i++)
    {
        if( d[i] == non_check ) cout << i<< endl;
    }
    return 0;
}

int make_dn(int num)
{
    int sum =num;
    while(num>0)
    {
        sum += num%10;
        num = num/10;
    }
    return sum;
}

python

def selfnum(n):
	return n+sum([int(i) for i in str(n)])

arr = [0]*10000
for i in range(100000):
	if(selfnum(i)<10000):
    	arr[selfnum(i)]=1

for i in range(10000):
	if arr[i] == 0:
    	print(i)

2. set 사용 

set : 자료형의 중복을 제거하기 위한 필터역할

raw_num = set(range(1,10001))
gener_num = set()

#ex) i = 123
#    j = 1 , 2, 3
#    i = i+1+2+#
for i in range(1,10001):
	for j in str(i):
    	i += int(j)
    gener_num.add(i) # 생성자 숫자 
    
self_num = sorted(naw_num - gener_num)
for i in self_num:
	print(i)

 

반응형
LIST