상세 컨텐츠

본문 제목

JAVA. 백준 알고리즘 단계별 문제 - 6단계(문제 번호 4673)

공-부/백준 알고리즘

by 사랑짱 2021. 5. 28. 19:43

본문

(문제 번호 4673)

10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

 

문제 해결 포인트

문제에 제시된 셀프 넘버는 생성자가 없는 숫자이다.

생성자는 d(n) 함수를 통해 구할 수 있는데 설명을 살펴보면 "n은 d(n)의 생성자"라고 한다.

다시 말해,  d(n) 함수 값으로 나오지 않는 숫자가 셀프 넘버가 된다. 

 

 

문제 해결 과정

1. 문제에 설명된 d(n) 함수를 만든다.

2.  SelfNumber을 구분하기 위해 boolean 타입의 배열을 선언한다.

   (인덱스는 0부터 시작하므로 max값에 +1을 증가시킨다.) 

3. d(n)의 생성자를 배열의 인덱스 값과 동일시하여 true 값을 입력한다.

   (생성자가 없는 인덱스의 값은 초기값(false)을 가진다.)

4. 생성자가 없는 SelfNumber를 조건문으로 호출한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
public class No02 {


    public static int d(int n) {      
        int sum = n;

        while(n != 0) {
            sum += n%10;
            n = n/10;
        }
        return sum;
   } //d 메소드
    

    public static void main(String[] args) {
        int max = 10000;
        boolean[] isSelfNum = new boolean[max + 1];

        for(int i = 1; i < isSelfNum.length; i++) {
            if(d(i) <= max) {
                isSelfNum[d(i)] = true;
            }
        }
 
        for(int i = 1; i < isSelfNum.length; i++) {
            if(isSelfNum[i] == false) {
                System.out.println(i);
            }
        }
   } //main

} //class
 
 
cs

 

 

관련글 더보기