본문 바로가기

코딩테스트/백준

[백준-자바] 4673번 셀프 넘버 / 2022.01.31

 

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

 

 

public class Main {
	public static boolean isSelf(int num) {
		for(int i=0; i<num; i++) { // i는 0부터 num-1까지
    		int sum = i;           
    		String num2 = Integer.toString(i); // 각 자리수를 구하기 편하게 변환 
    		for(int j=0; j<num2.length(); j++) {
    			sum += num2.charAt(j) - '0'; // 각 자리수 만큼 sum에 더해줌 
    		}
    		if(sum == num) // 만약에 sum이 num과 같다면 생성자가 있으므로 셀프넘버가 아님
    			return false; // false 리턴
    	}
		return true; // 셀프넘버가 맞다면 true리턴
	}
	
	public static void main(String[] args){
    	int num = 1;
    	while(num<=10000) { // num은 1부터 10000까지  
    		if(isSelf(num) == true) // 반환값이 true라면 셀프 넘버이므로
    			System.out.println(num); // num 출력
    		num++;	// 다음 num
    	}
    }
}

 

풀이 : 

생성자가 없는 수가 셀프 넘버이다.

 

1. 1부터 10000까지 셀프 넘버를 출력해야한다.

2. 셀프 넘버인지 알아보기 위해 메소드 isSelf를 사용한다

3. 반환값이 true라면 셀프 넘버이고 반환값이 false라면 셀프 넘버가 아니다.

 

- main메소드의 while문 : 

num을 하나씩 늘려가면서 셀프 넘버인 것만 출력한다.

 

- isSelf메소드