728x90
# 출처 : https://www.acmicpc.net/problem/4673
# 문제
주어진 수의 범위에 해당하는 셀프넘버를 출력하는 프로그램
# 풀이
d(n) = n + n의 각 자리수
n, d(n), d(d(n)), d(d(d(n))), ... 과 같이 무한 수열을 만들 수 있다.
n을 d(n)의 생성자라고 한다면, d(d(n))의 생성자는 d(n)이 된다는 것을 알 수 있다.
더보기
n=33
d(n)=33+3+3=39
d(d(n))=39+3+9=51
...
39의 생성자는 33, 51의 생성자는 39, ....
여기서 셀프 넘버란 생성자가 없는 숫자를 의미한다.
# 코드
public class Main {
static final int NUM = 10001;
static final int TEN = 10;
public static void main(String[] args) {
boolean[] numbers = new boolean[NUM]; // false로 자동으로 초기화
for(int i=1; i<NUM; i++){
int num = divice(i);
if(num>NUM-1) continue;
numbers[num] = true;
}
for(int i=1; i<NUM; i++){
if(numbers[i]) continue; // true라면 셀프넘버
System.out.println(i);
}
}
public static int divice(int num) {
int sum = num;
while(num >= TEN){
sum += num % TEN;
num /= TEN;
}
return sum+num;
}
}
728x90
'algorithm > baekjoon' 카테고리의 다른 글
[BOJ] 2446 별 찍기-9 (Java) (0) | 2022.09.29 |
---|---|
[BOJ] 1978 소수 찾기 (Java) (2) | 2022.06.28 |
[BOJ] 2447 별찍기-10 (python) (0) | 2021.09.29 |
[BOJ] 5557 1학년 (python) (0) | 2021.09.29 |
[BOJ] 11052 카드 구매하기 (python) (0) | 2021.09.29 |