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 되게 설정했다.
이부분이 가장 핵심 개념이라 생각한다.