#28. [백준_C언어] 4673 : 셀프 넘버

 

 입력 코드 

#include <stdio.h>

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

	while (1) {
		if (n == 0)
			break;
		sum += n % 10;
		n = n / 10;
	}
	return sum;
}

main() {
	int i = 1, temp;
	int arr[10001] = { 0, };

	for (i = 1; i < 10001; i++) {
		temp = SelfNumber(i);
		if (temp < 10001)
			arr[temp] = 1;
	}

	for (i = 1; i < 10001; i++) {
		if (arr[i] != 1)
			printf("%d\n", i);
	}
	return 0;
}

 

 코드 설명 

배열과 반복문, 조건문을 이용해 함수를 작성하는 문제

#include <stdio.h>

void SelfNumber() {
	int i, j, n;
	int len = 0, count, sum = 0;
	int arr[4];

	for (j = 0; j < 4; j++) {
		if (n / 10 != 0)
			len += count;
	}

	for (i = 0; i < len; i++) {
		arr[i] = n % 10;
		sum += arr[i];
	}

	int dn = n + sum;
}

진짜 처음에는 어떻게 해야 할지 몰라서 별걸 다해봤다. 자릿수에 따라서 더하는 각 자리 수의 개수도 달라지고.. 그리고 어차피 마지막에 생성자가 존재하는지 여부를 어떻게 판단해야 할지 모르겠다.

 

그래서 그냥 싹 다 지우고 처음부터 다시 시작했다. 찾아봤더니 처음부터 배열 값을 1로 설정해두고 나머지를 1이 아닌 수로 지정해서 1이 아닌 수들을 출력하도록 작성하는 풀이가 대부분이었다.

#include <stdio.h>

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

	while (1) {
		if (n == 0)
			break;
		sum += n % 10;
		n = n / 10;
	}
	return sum;
}

main() {
	int i = 1, temp;
	int arr[10001] = { 0, };

	for (i = 1; i < 10001; i++) {
		temp = SelfNumber(i);
		if (temp < 10001)
			arr[temp] = 1;
	}

	for (i = 1; i < 10001; i++) {
		if (arr[i] != 1)
			printf("%d\n", i);
	}
	return 0;
}

대충 어떻게 진행되는지는 알겠는데 다시 풀라고 하면 못 풀 것 같다. 풀이만 10개 넘게 찾아본 것 같은데..

 

참고한 사이트

blockdmask.tistory.com/160

 

[백준 4673] 셀프 넘버

안녕하세요. BlockDMask 입니다. 추석날 2번째 문제 입니다. 왔다 갔다 차안에서 문제를 풀고 있습니다. 길이 많이 막히네요;; 170818 문제 빼먹음 -> 171004 완료 0. 제목 백준 4673 셀프 넘버 BOJ 4673 self.

blockdmask.tistory.com

gabii.tistory.com/entry/BaekJoonC-%EB%B0%B1%EC%A4%80-4673%EB%B2%88-%EC%85%80%ED%94%84-%EB%84%98%EB%B2%84

 

[BaekJoon/C] 백준 4673번 셀프 넘버

이번 포스팅은 백준 알고리즘 사이트의 4673번 셀프 넘버 문제를 C 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다. https://www.acmicpc.net/problem/4673 이번 포스팅은 새

gabii.tistory.com

sungmin-joo.tistory.com/51

 

[백준] 4673번 셀프 넘버 C, Python 해설

에라토스테네스의 체 알고리즘으로 분류된 문제이다. 하지만 C언어로 푼 다면 단순하게 자신만의 알고리즘으로도 풀이가 가능하다. 풀이 문제에서 정의한 셀프 넘버는 생성자가 없는 숫자를 뜻

sungmin-joo.tistory.com

 

 

 문제 출처 

www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net