10000보다 작거나 같은 셀프 넘버를 구해야 하므로,
1부터 10000까지 for문을 돌리며 셀프넘버를 찾는다
우선, 반복되는 작업은 함수로 꺼내주는게 깔끔하고, 관리가 편하겠다
public static int cnst(int number){
int sum = number;
//각 자리수를 더해주는 로직
while(number!=0){
sum += number%10;
number = number/10;
}
return sum;
}
number: 생성자 역할
<로직을 설명하자면>
만약 number가 1234라면
number%10 = 4
number/10 = 123
-> while문을 한번 돌면 num=123과 sum 에는 맨 마지막 자리수를 더한 1237이 나오고,
두번 돌면 num =12와 sum=1237+3 = 1240
세번 돌면 num = 1과 sum = 1240+1 = 1241
네번 돌면 num = 0과 sum = 1242
즉, 원래 숫자와 각 자리수를 더해준 결과값이 나오게 된다.
이 함수를 사용해 로직을 짜보면,
public class Main{
public static void main(String[] args){
boolean[] arr = new boolean[10001];
for (int i = 1; i<10001; i++){
int n = cnst(i);
if (n < 10001){
arr[n] = true;
}
}
for (int i = 1; i<10001;i++){
if(arr[i] == false){
System.out.println(i);
}
}
}
}
1. 1~10000까지 boolean으로 된 배열을 만들어준다.
2. 배열 전체를 for문을 돌며 만들어준 함수가 n을 return하는데, 이 n이 10000보다 작다면 셀프넘버가 아니므로 true로 바꾸어준다.
3. 다시 배열 전체를 돌며 false인(셀프넘버인 숫자를 print한다)
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 11654 - 아스키 코드- JAVA[자바] (0) | 2022.11.29 |
---|---|
[백준] 1065 -JAVA[자바] (0) | 2022.11.29 |
[백준] 4344 - 평균은 넘겠지 - JAVA[자바] (0) | 2022.11.27 |
[백준] 8958 - OX퀴즈 - JAVA[자바] (0) | 2022.11.27 |
[백준] 1546 - 평균 - JAVA[자바] (0) | 2022.11.27 |