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. 문제가 이해하기 어려워 미루어 놓았던 생성자관련문제들을 차례대로 고민하고 풀다보니 적응되어 차근차근 혼자 힘으로 풀게되는것 같다.🥳
Reference
この問題について(N10. 白駿4673), 我々は、より多くの情報をここで見つけました https://velog.io/@jln0616/N10.-백준-4673テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol