728x90
코드
#include <stdio.h>
int d(int n) { //n과 n의 각 자릿수를 더하는 함수 d(n)
int sum = n;
for (; n > 0; n /= 10)
sum += n % 10;
return sum;
}
main() {
int arr[10001], i, check;
for (i = 1; i < 10001; i++) {
check = d(i);
if (check < 10001) //d(i)는 생성자가 있으므로 arr[i]를 1로 저장
arr[check] = 1;
}
for (i = 1; i < 10001; i++)
if (arr[i] != 1) //arr[i]가 1이 아니면 셀프 넘버이므로 출력
printf("%d\n", i);
return 0;
}
설명
1부터 10000까지 숫자 중 생성자가 있는 숫자를 제외하는 방식이다.
d(n)은 n과 n의 각 자릿수를 더하는 함수이다.
d(i)의 값은 i가 생성자로 존재하므로 셀프 넘버가 아니다. 따라서 arr의 i번째 값을 1로 저장함으로써 셀프 넘버에서 제외한다.
이렇게 10000까지 반복하여 모두 체크가 되면, 다시 for문을 통해 1부터 시작하여 arr에서 값이 1이 아닐 때 해당 인덱스를 출력한다.
728x90
'C & C++ > BOJ' 카테고리의 다른 글
[백준] 1371번: 가장 많은 글자 (0) | 2021.02.25 |
---|---|
[백준] 16503번: 괄호 없는 사칙연산 (0) | 2021.02.19 |
[백준] 1264번: 모음의 개수 (1) | 2021.02.19 |
[백준] 1259번: 팰린드롬수 (0) | 2021.02.19 |
[백준] 1152번: 단어의 개수 (0) | 2021.02.09 |