스터디사이트 : https://www.acmicpc.net/
JAVA 알고리즘 : 셀프 넘버[백준 4673]
※ 문제 Url
https://www.acmicpc.net/problem/4673
셀프 넘버
생성자가 없는 숫자를 셀프 넘버라고 한다.
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다.
양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자.
예를 들어, d(75) = 75+7+5 = 87이다.
n을 d(n)의 생성자라고 한다.
33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다.
위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다.
생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
입력
입력없음
출력
1
3
5
7
9
20
31
42
53
64
|
| <-- a lot more numbers
|
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993
※ 내가 푼 코드
해당 블로그댓글이나 아래 GitHubGist 코맨트에 태클 얼마든지 환영합니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Main{ | |
public static int calcLen(int param){ | |
if (param>=10){ | |
return calcLen(param/10) + (param%10); | |
}else{ | |
return param; | |
} | |
} | |
public static int getSelfNum(int param){ | |
int cnt = 0; | |
for(int p=1; p <= param; p ++){ | |
int calcLen = calcLen(p); | |
if(p + calcLen == param){ | |
cnt++; | |
} | |
} | |
return cnt; | |
} | |
public static void main(String[] args) { | |
int count=0; | |
for(int i=1; i<=10000; i++){ | |
count = getSelfNum(i); | |
if(count==0){ | |
System.out.println(i); | |
} | |
} | |
} | |
} |
'JAVA > JAVA 자료구조 알고리즘' 카테고리의 다른 글
JAVA 알고리즘 : 섬의 개수[백준 4963] (0) | 2017.04.26 |
---|---|
JAVA 알고리즘 : 이진 검색 트리[백준 5639] (0) | 2017.04.19 |
JAVA 알고리즘 : 소수 판별하기 (0) | 2016.08.17 |
JAVA 자료구조 : 이진검색트리 중복노드 제거하기 (0) | 2016.08.16 |
JAVA 자료구조 : 이진검색트리 순회 (0) | 2016.08.11 |