문제 내용은 입력 없이 출력으로 1부터 10000까지 숫자 중 셀프 넘버만 출력해주면 되는데, 셀프 넘버란 d(n)을 해서 나오지 않는 숫자들을 말한다, 이제 d(n)은 1의 경우에는 1과 1을 더해서 2를 만들 수 있고, 10의 경우에는 10 + 1 + 0 해서 d(10)은 11이 되니, 11은 셀프넘버가 될 수 없고, 100의 경우에는 100 + 1 + 0 + 0 이니 101은 셀프 넘버가 될 수 없다 이렇게 1부터 10000까지의 수 중 셀프 넘버만을 찾아 출력해주면 되겠다
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[10001];
for (int i = 1; i < arr.length; i++) {
arr[i] = i;
}
int[] ans = Arrays.copyOf(arr, 100001);
for (int i = 1; i < arr.length; i++) {
int[] split = Arrays.stream(String.valueOf(arr[i]).split("")).mapToInt(Integer::parseInt)
.toArray();
int nonSelf = arr[i] + Arrays.stream(split).sum();
if (nonSelf <= 10000) {
ans[nonSelf] = 0;
}
}
int[] filteredAns = Arrays.stream(ans).filter(x -> x != 0).toArray();
for (int i = 0; i < filteredAns.length; i++) {
System.out.println(filteredAns[i]);
}
}
}
문제를 풀어보자면, 배열에 1부터 10000까지 넣어준 뒤, d(n)을 돌려주면서 셀프 넘버가 아닌 값을 ans 배열에서 모두 0 처리 해준 뒤, for문이 끝나고 나면, ans 배열에서 0인 값만 모두 빼준 다음 배열을 다시 반복시키면서 모두 출력해주면 끝이다.
Leave a Reply