[C언어 코드업 문제풀이] CodeUp 1615 : 셀프 넘버(Self-Number)

코드업 1615번 셀프 넘버 문제풀이 해답입니다.

 

1. 문제 설명

 

어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자.

예를 들어 d(91) = 9 + 1 + 91 = 101 이 때, n을 d(n)의 제네레이터(generator)라고 한다.

위의 예에서 91은 101의 제네레이터이다.

어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다.

그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다.

예를 들어 1,3,5,7,9,20,31 은 셀프 넘버 들이다. 

시작 값(a)과 마지막 값(b)가 입력되면 두 수 사이의 셀프 넘버들의 합을 출력하시오.

 

2. 입력

 

시작 값(a)과 마지막 값(b)이 공백으로 분리되어 입력된다.( 1 <= a <= b <= 5,000)

 

3. 출력

 

두 수사이의 셀프넘버들의 합을 출력한다.

 

4. 입력 예시

 

1 10

 

5. 출력 예시

 

25

 

1부터 10사이의 셀프 넘버는 1, 3, 5, 7, 9이다.

따라서 합은 25

 

6. 문제 풀이

 

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
34
35
#include "stdio.h"
#include "stdbool.h"
 
bool arr[5001];
 
int self(int n) {
    int sum = n;
    while (1) {
        if (n == 0) { break; }
        sum += n % 10;
        n = n / 10;
    }
    return sum;
}
 
int main() {
 
    int i, j;
    scanf("%d %d"&i, &j);
 
    for (int k = 1; k <= 5000; k++) {
        int index = self(k);
        if (index <= j) {
            arr[index] = true;
        }
    }
    int result = 0;
    for (int k = i; k <= j; k++) {
        if (!arr[k]) { result += k;
    
        }
        
    }
    printf("%d", result);
}

 

댓글()