본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 4673번 : 셀프넘버, 자릿수 판별하는 방법

by hyunipad 2023. 4. 24.
반응형

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

생성자는 자기 자신 + 각각의 자릿수이다.

예를 들어 101은 101 + 1 + 0 + 1 = 104로 101은 104의 생성자입니다.

 

이때, 생성자가 없는 숫자를 셀프 넘버라고 하는데, 10000보다 작거나 같은 셀프 넘버를 출력합니다.

이 문제에서 각각의 자릿수를 판별하여 더해야 하는데, 그 알고리즘 기록을 위해 포스팅을 작성합니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Number_4673 {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		Boolean[] result = new Boolean[10001];
		Arrays.fill(result, false);
		
		for(int i = 1 ; i < 10001 ; i++) {		
			int constructor = makeConstructor(i);
			
			if(constructor <= 10000) {
				result[constructor] = true;
			}
			
		}
		
		for(int i = 1 ; i <= 10000 ; i++) {
			if(!result[i]) {
				bw.write(String.valueOf(i) + "\n");
			}
		}
		
		br.close();
		bw.flush();
		bw.close();
	}

	public static int makeConstructor(int N) {
		int result = N;
		
		while(N != 0) {
			result = result + (N % 10); // 일의 자리 수
			N = N / 10; // 일의 자리가 되면 몫이 0이기 때문에 반복문 종료
		}
		
		return result;
	}

}

 

 

반응형

댓글