상세 컨텐츠

본문 제목

[백준] 4673번 셀프 넘버 (c++)

프로그래밍/백준 c++

by montgras 2021. 7. 5. 15:53

본문

반응형

[문제] https://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

 

 


[풀이]

1. 길이 10000짜리 배열을 선언하고 모든 값을 0으로 초기화 시켜준다.

2. 셀프넘버의 생성자는 셀프넘버보다 클 수 없기 때문에 10000까지의 수를 생성자로 취급하고, 이 생성자가 만들어낸 번호가 10000보다 작으면 해당 칸의 값을 1로 변경한다.

3. 배열을 한 번 훑어서 내부 값이 0이라면 출력한다.

 


(전체 코드)

#include <iostream>

using namespace std;
#define SIZE 10001

int ten(int);
int hun(int);
int thou(int);

int main() {
	int num[SIZE] = { 0, };
	int self = 0;

	for (int i = 1; i < SIZE; i++) {
		self = i + (i%10) + ten(i) + hun(i) + thou(i);
		if(self < SIZE) num[self] = 1;
		self = 0;
	}

	for (int i = 1; i < SIZE; i++) {
		if (num[i] == 0) cout << i << endl;
	}

	return 0;
}

int ten(int n) {
	return (n % 100) / 10;
}
int hun(int n) {
	return (n % 1000) / 100;
}
int thou(int n) {
	return n / 1000;
}

 

셀프넘버를 모두 수식으로 만들기엔 복잡하니, 각 자리 수의 숫자를 출력하는 함수를 만든다. 일의 자리 수는 10으로 나머지 연산을 하면 되니 따로 만들어 주지 않았다.

반응형

관련글 더보기

댓글 영역