[백준, BOJ 4673] 셀프 넘버 (java)
Problem Solving/BOJ

[백준, BOJ 4673] 셀프 넘버 (java)

728x90

출처-https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌�

www.acmicpc.net


 

내 생각 :

이 문제는 재귀 함수 형식으로 풀었다.
 n으로 만든 수가 num일 때, dp[num]==0이라면 다시 d 함수를 호출한다.(d(num))
 이때, dp[num]!=0이라면 이미 num은 다른 생성자를 가지고 있기 때문에 이 과정을 반복할 필요가 없다.
 따라서 다시 d(num)을 호출할 필요가 없다.

 

public class Main {
	static int dp[]=new int[10001];
	
	static void d(int n) {
			int num=n;
			for (int i=1;i<=n;i*=10)
				num+=n%(i*10)/i;
			if (num<=10000)
				if (dp[num]==0) {
					dp[num]++;
					d(num);
				}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i=1;i<=10000;i++)
			if (dp[i]==0)
				d(i);
		
		for (int i=1;i<=10000;i++)
			if (dp[i]==0)
				System.out.println(i);
	}

}
728x90