본문 바로가기

Programming/알고리즘

[백준] 4673 - JAVA[자바]

 

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한다)