궤도

[백준] 4673번 : 셀프 넘버 본문

💻 현생/⛓ 알고리즘

[백준] 4673번 : 셀프 넘버

영이오 2020. 10. 13. 15:32

문제

 


풀이

 

A가 B의 생성자가 되기 위해선 A<B의 관계를 충족해야 한다. 그렇다면 10,000 이하의 모든 숫자에 대해 그 수가 생성자가 있다면 그 역시 10,000 이하일 것이다. 그렇다면 10,000 이하의 모든 수에 대해 d(n) 함수를 실행해서 생성자가 있는 숫자들을 체크한다. 체크되지 않은 숫자는 셀프 넘버일 것이다.


소스코드

 

#include <iostream>
using namespace std;

int func(int n) {
	int sum = n;

	while (n != 0) {
		sum += (n % 10);
		n /= 10;
	}

	return sum;
}

int main() {
	int i;
	int num[10001];
	for (i = 0; i < 10001; i++)
		num[i] = 1;

	for (i = 0; i < 10001; i++) {
		if(func(i)<10001)
			num[func(i)] = 0; //생성자가 있으면 0으로
	}
	for (i = 0; i < 10001; i++) {
		if (num[i] == 1)
			cout << i << endl;
	}
}
Comments