PS/BOJ

[백준 BOJ] 4673 셀프 넘버

Jubil 2020. 3. 1. 10:59
반응형

링크

https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.  예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는

www.acmicpc.net

풀이

 

10,000보다 작거나 같은 셀프 넘버를 출력하는 문제입니다.

숫자가 작기 때문에 셀프 넘버가 아닌 숫자를 지우는 방식을 사용하면 됩니다.

 

셀프 넘버 체크 배열을 만들고 i를 1부터 증가시키면서 셀프 넘버가 아닌 수들을 지워줍니다.

셀프 넘버를 출력합니다.

 

 

코드

//4673_셀프 넘버
#include <cstdio>
using namespace std;

int n, arr[12000];

int main() {
	for (int i = 1; i < 10000; ++i) {
		int  cnt = i, tmp = i;

		while (tmp) {		// 수를 만든다
			cnt += tmp%10;
			tmp /= 10;
		}

		arr[cnt] = 1;	// 생성자가 있다 -> 셀프 넘버가 아니다
	}

	for (int i = 1; i <= 10000; ++i) {
		if (!arr[i]) printf("%d\n", i);	// 셀프 넘버 출력
	}

	return 0;
}

반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ] 2292 벌집  (1) 2020.03.07
[백준 BOJ] 2839 설탕 배달  (0) 2020.03.07
[백준 BOJ] 1065 한수  (0) 2020.02.29
[백준 BOJ] 3047 ABC  (0) 2019.08.13
[백준 BOJ] 5585 거스름돈  (0) 2019.08.13