https://www.acmicpc.net/problem/4673
Idea
셀프넘버는 소수가 아닌 수랑 개념이 비슷하다고 생각한다. 솔직히 무슨 소린지 몰라서 찾아보고 한참만에 이해했다 . .
arr 배열을 모두 0으로 초기화 시켜준다.
1부터 10000까지 증가하는 반복문을 만들고 반복문에 i
를 self_num
함수에 인자값으로 넘긴다.
self_num
함수는 인자값 n
과 1의자리 ~ n의 length 까지의 자릿수의 수를 모두 더한 값을 반환해주는 함수이다.
이 수는 셀프 넘버가 아니므로 arr[n]에 1을 대입해주고 마지막에 출력 반복문에 조건을 arr[i]
가 0이면 그 배열의 index를 출력한다.
처음에 배열을 모두 0으로 초기화 시켜줬기 때문에 셀프 넘버인 배열의 index는 1이 대입되어 있기 때문에 셀프 넘버를 제외한 숫자는 출력이 된다.
Code
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int self_num(int n);
int main(void) {
int arr[10001] = { 0, };
int n;
for (int i = 1; i < 10001; i++) {
n = self_num(i);
if (n < 10001) {
arr[n] = 1;
}
}
for (int i = 1; i < 10001; i++) {
if (arr[i] == 0) {
printf("%d\n", i);
}
}
return 0;
}
int self_num(int n) {
int sum = n;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
쿡쿡