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
'Problem Solving > BOJ' 카테고리의 다른 글
| [백준, BOJ 11654] 아스키 코드 (java) (0) | 2020.08.27 |
|---|---|
| [백준, BOJ 1065] 한수 (java) (0) | 2020.08.26 |
| [백준, BOJ 15596] 정수 N개의 합 (java) (0) | 2020.08.26 |
| [백준, BOJ 4344] 평균은 넘겠지 (java) (0) | 2020.08.26 |
| [백준, BOJ 8958] OX퀴즈 (java) (0) | 2020.08.26 |