N10. 白駿4673



自動番号付け


問題を読んで理解できず、何度も読み返し、何度も悩んだ.
トラブルシューティング順序
1.1~10000個の数字があるかどうかを判断する
2.出力に作成者が含まれていない数
このように編成するのは簡単ですが、コードはそうではありません.
まず1から10000の数字を繰り返し、
さらに,その数に構造関数があるか否かを繰り返し複文で判断する.
		int[] arr = new int[10];		// 각 자리수가 저장될 배열
		int[] result = new int[10];		// 자리수의 합이 기준인 수와 같다면 생성자이기때문에
		int num3 = 0;					// 배열에 차례대로 대입
		int count = 0;
		
		for(int i=1; i<=10000; i++) {
			for(int j=1; j<=i; j++) {	// i의 수보다 작은 반복문을 통해 생성자인 수 찾기
				int num1 = j;
				int k = 0;
				while(num1 != 0) {
					arr[k] = num1%10;
					num1 /= 10;
					k++;
				}
				int num2 = j;
				for(int l=0; l<arr.length; l++) {
					num2 += arr[l];
				}
				
				for(int o=0; o<arr.length; o++) arr[o] = 0;
				
				if(num2 == i) {
					count++;
				}
			}
各ビット数をarr[]アレイに格納し、ホストjに加算する
判別する数字iと同一であれば、生成者と判断し、count変数を増減する.
			if(count == 0) System.out.println(i);
			num3 = 0;
			count = 0;
その後countは0ではなく構造関数の存在を表す.if文により、count値が0でなければ判断する数字iが書かれている.

<フルコード>

public class Main {

	public static void main(String[] args) {
		int[] arr = new int[10];		// 각 자리수가 저장될 배열
		int num3 = 0;
		int count = 0;
		
		for(int i=1; i<=10000; i++) {
			for(int j=1; j<=i; j++) {	// i의 수보다 작은 반복문을 통해 생성자인 수 찾기
				int num1 = j;
				int k = 0;
				while(num1 != 0) {
					arr[k] = num1%10;
					num1 /= 10;
					k++;
				}
				int num2 = j;
				for(int l=0; l<arr.length; l++) {
					num2 += arr[l];
				}
				
				for(int o=0; o<arr.length; o++) arr[o] = 0;
				
				if(num2 == i) {
					count++;
				}
			}
			
			if(count == 0) System.out.println(i);
			num3 = 0;
			count = 0;
		}
	}
	
}
ps. 문제가 이해하기 어려워 미루어 놓았던 생성자관련문제들을 차례대로 고민하고 풀다보니 적응되어 차근차근 혼자 힘으로 풀게되는것 같다.🥳