728x90
public class Main {
public static void main(String[] args) {
boolean[] check = new boolean[10001];
for(int i=0;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=sum+(number%10);
number=number/10;
}
return sum;
}
}
10000보다 작거나 같은 수를 검사하면서 생성자가 있는 수,
즉 셀프 넘버가 아니라면 true로 바꾸어 false만 출력하게끔 알고리즘을 구성하였다.
d함수는 만약 1234가 number로 들어왔다면
sum을 1234로 초기화하고
1번째 반복
sum = 1234+4
number = 123
2번째 반복
sum = 1238+3
number = 12
3번째 반복
sum = 1241+1
number = 1
4번째 반복
sum = 1242+2
number = 0
에서 끝나게 되고 새로운 숫자인 sum을 return한다.
이 숫자는 생성자가 있는 숫자이므로 main의 첫번째 for문에서 true로 바꾸는 과정을 거친다.
두번째 for문에서는 셀프 넘버인 false값들만 출력한다.
StringBuiler는 불변 객체인 String (예를 들어 abc와 def String끼리 더하면 새로운 객체인 abcdef를 생성함)
의 성능을 개선하고자 사용한다.
이는 기존 데이터에 append를 이용하여 새로운 객체를 생성하지 않고 직접 더하는 방식이다.
728x90
'백준 단계별' 카테고리의 다른 글
[Java] 백준 11654: 아스키 코드 (0) | 2023.01.13 |
---|---|
[Java] 백준 1065: 한수 (0) | 2023.01.12 |
[Java] 백준 15596: 더하기 사이클 (0) | 2023.01.11 |
[Java] 백준 4344: 평균은 넘겠지 (2) | 2023.01.11 |
[Java] 백준 8958: OX퀴즈 (0) | 2023.01.11 |