Algorithm

백준 4673(JAVA) - 셀프 넘버

Hyeon Lee 2022. 11. 14. 13:16
728x90

4673번: 셀프 넘버 (acmicpc.net)

 

4673번: 셀프 넘버

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

www.acmicpc.net

 

오늘의 문제는 셀프 넘버 이다. 뭔가 생성자라는 느낌이 이전에 풀어봤던 문제와 유사해서 쉽게 접근할 수 있었다. 생성자를 만드는 d 함수를 하나 만들어 주고 d 함수를 boolean 배열 속에 담으면 간단하게 끝나는 문제였다.

 

알고리즘

1. 생성자 함수를 while(num != 0) 까지 반복문을 돌리면서 더하고 sum을 반환시키는 것으로 만들어준다.

2. boolean 배열을 10001개의 크기로 만들어준다.

3. 1~num까지의 반복문 안에서 10000개 안으로는 true를 반환하여 배열 속에 담아준다.

4. 1~num까지의 반복문 안에서 arr배열이 false가 나오면 생성자 수가 아니므로 출력시켜준다.

 

package selftest;


public class Main_4673 {
	
	public static void main(String[] args) {
	
	final int num = 10001;
	
	boolean arr[] = new boolean[num];
	
	for(int i = 1; i<num; i++) {
		int n = d(i);
		
		if(n < 10001) {
			arr[n] = true;
		}
	}
	
	for(int i = 1; i<num; i++) {
		if(!arr[i]) {
			System.out.println(i);
		}
	}
}
	
	public static int d(int num) {
		int sum = num;
		
		while(num != 0) {
			sum += (num % 10);
			num /= 10;
		}
	return sum;
	}
}

 

이렇게 해결할 수 있었다. 생각보다 그리 어렵진 않은 문제였고, 따로 입력을 받을 필요도 없이 단순하게 함수 하나만 만들 수 있으면 풀 수 있는 문제였다.

728x90