본문 바로가기
Computer Science/Algorithm

[JAVA] 셀프 넘버

by soro.k 2022. 3. 9.

https://st-lab.tistory.com/53?category=837197 

 

[백준] 4673번 : 셀프 넘버 - JAVA [자바]

https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를..

st-lab.tistory.com

*해당 포스팅은 상단에 링크된 포스팅을 바탕으로 개인 공부 목적을 위해 작성되었으므로 자세한 내용은 위 링크를 확인해 주시기 바랍니다.


셀프 넘버

양의 정수 n에 대해서 n과 n의 각 자리수를 더하는 d(n) 함수가 있다고 하자.
예를 들어, 33으로 시작한다면 

d(33) = 33 + 3(33의 첫 번째 자리수) + 3(33의 두 번째 자리수) = 36

이때 d(33)의 결과값인 36의 생성자는 33이다. 

하지만 어떤 수들은 d(n) 함수를 통해 만들어지지 않는다. 이렇게 자신의 생성자를 가지지 않는 수셀프 넘버라고 한다.

 

 

블로그 코드

public class Main {
	public static void main(String[] args) {
    	
        boolean[] check = new boolean[10001];
        
        for(int i = 1; i < 10001; i++) {
        	int n = d(i);
            
            if(n < 10001) {
            	check[n] = true;
            }
        }
        
        StringBuilder sb = new StringBuilder();
        
        for(int i = 1; i < 10001; i++) {
        	if(!check[i]) {
            	sb.append(i).append("\n");
            }
        }
        System.out.println(sb);
    }
    
    public static int d(int number) {
    	int sum = number;
        
        while(number != 0) {
        	sum += (number % 10);
            number = number / 10;
        }
        return sum;
    }
}

→ d 함수 속 while문 안에서 계속 돌면서 차례대로 자리수를 더하게 만들고 반환한다.

→ 생성자를 가지는 index에만 true값을 설정하고 false인 index를 출력한다.

 

 

 

 

 

 

 

'Computer Science > Algorithm' 카테고리의 다른 글

[JAVA] 알파벳 찾기  (0) 2022.03.22
[JAVA] 한수  (0) 2022.03.09
[JAVA] OX퀴즈  (0) 2022.03.08
[JAVA] 나머지  (0) 2022.03.08
[JAVA] 숫자의 개수  (0) 2022.03.06