Algorithm
백준 4673(JAVA) - 셀프 넘버
Hyeon Lee
2022. 11. 14. 13:16
728x90
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