[BOJ_step_06]함수 - 셀프 넘버

최대 1 분 소요

셀프 넘버

문제


1. 문제 설명 및 풀이

d(n)은 n과 n의 각 자리수를 더하는 함수이다. 이 때 n을 d(n)의 생성자 라고 한다. ex. d(75) = 75 +7 + 5 = 87 75는 87의 생성자
이 때 생성자가 없는 숫자를 셀프넘버라고 한다.
100보다 작은 셀프 넘버는 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97 이다.

처음에는 문제 이해가 되지 않아서 고민을 많이 했다. 어떻게 해야할까 하다가 이 문제의 조건은 10000보다 작은 셀프 넘버를 찾아야한다. 그래서 1부터 10000까지 모든 숫자에 대해 셀프 넘버인지 아닌지를 알아보기위해 10001개의 bool형 변수를 만들고 위 함수 식을 구현하여 생성자가 있는지 없는지를 확인하여 생성자가 있으면 bool 변수를 true로 바꾼다. 그리고 bool 변수의 해당 인덱스의 값이 false이면 출력한다. ***


2. 코드

#include<cstdio>
bool N[10001];
int Process(int n) {
	int sum = n;		//자기자신 더해줌
	while (n) {
		sum += n % 10;	//1의자리 숫자 더해줌
		n /= 10;			//한 자리 줄임
	}
	return sum;
}
int main() {
	for (int i = 1; i < 10001; i++) {
		int idx = Process(i);
		if (idx <= 10001)
			N[idx] = true;	//셀프넘버가 아닌 수를 check
	}
	for (int i = 1; i < 10001; i++)
		if (!N[i]) printf("%d\n", i);
	return 0;
}

[문제출처]https://www.acmicpc.net/problem/4673

댓글남기기