BOJ 4673

2020-01-22

위 문제는 백준 사이트의 알고리즘 4673번 문제에 관한 설명임


public class Main {

	public static void main(String[] args) {
		int N = 10000;
		int array[] =new int [N];
		int check;
		int i;
		for (i = 1; i <= array.length ; i++) {
			check = getDn(i);
			if(check<=N)
				array[i]=1;
		}
		for(i=1;i<=array.length;i++)
		{
			if(array[i]==0)
			{
				System.out.println();
			}
		}
		
	}
	
	private static int getDn(int n) {
		int dn = n;
		while(n > 0) {
			dn += n % 10;
			n /= 10;
		}
		return dn;
	}

}

일단 내가 푼 소스코드이다.

처음에 해당 문제를 접했을 때, 무한수열, 셀프넘버의 용어를 듣고

혼자 너무 어렵게 생각하고 있었다.

출력은 결과 모습과 동일하게 나오지만 해당 소스는 런타임 에러가 나타난다..

아쉽게도 다른사람이 푼 것을 보고 런타임 에러를 잡아냈기에,

내가 풀었다고 생각하지 않아 개념에 대해서만 작성하려고 한다.

조금 더 자세히..

예시를 들어

33 + 3 + 3 = 39의 경우

	
	private static int getDn(int n) { // 33이 옴
		int dn = n; //dn에 33입력
		while(n > 0) { //n이 0보다 클때 동작함
			dn += n % 10; //36 = 33 +3 1회차에서
			n /= 10; //33 -> 3
		}
		return dn;
	}

1회차만 적어놓았지만

dn = 33 n=33 초기

dn = 36 n=3 1회

dn = 39 n=0 2회 이후 n=0이므로 while에서 빠져나와 return 되게 설정했다.

이부분이 가장 핵심 개념이라 생각한다.

셀프 넘버