본문 바로가기
Rev's/기록하기

NEXON 지원 준비 - 입사문제??

by RevFactory 2009. 12. 9.
실기시험을 보던가..??
아무튼.. 별로 어렵진 않네 ^^;;

---------------------------------------------------------------------------------

어떤 자연수 n이 있을 떄, d(n)을 n의 각 자릿수 숫자들과 n자신을 더한 숫자라고 정의하자.

예를들어 d(91) = 9 + 1 + 91 =101

이 때, n을 d(n)의 제네레이터라 한다.

위의 예에서 91은 101의 제네레이터이다.

어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다. 그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가

셀프넘버라고 이름붙였다.

1,3,5,7,9,20,31 … 이 그것들인데…  1~ 5000사이의 셀프넘버들의 합을 구하라.


---------------------------------------------------------------------------------
//대충 만들어보니 답은 나오는데 최적화가 필요할듯 ^^
class Program
    {
        static void Main(string[] args)
        {
            const int MAX = 5000;
            List<int> numberList = new List<int>();
            for (int i = 0; i <= MAX; ++i)
                numberList.Add(i);
            for (int i = 0; i <= MAX; ++i)
                numberList.Remove(calGenerater(i));

            foreach (int n in numberList)
                Console.WriteLine(n);
            Console.WriteLine("Sum : " + numberList.Sum());
        }

        static int calGenerater(int num)
        {
            int sum = num;
            int temp = num;
            do sum += temp % 10;
            while (0 < (temp /= 10));
            return sum;
        }
    }