개발 공부~

[ 백준 - 4673] 셀프 넘버 .java 본문

코딩테스트/백준

[ 백준 - 4673] 셀프 넘버 .java

머밍 2025. 5. 7. 18:05

https://www.acmicpc.net/problem/4673

 

셀프 넘버

양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수로 만들 수 없는 수

또한 만들어진 수에서 이어서 다음 수를 만들 수 있다 -> 범위가 초과될 때까지 계속 만들기

 

=> 셀프넘버인지 판별하는 배열 생성, 다 참으로 시작

=> 하나의 숫자에서 생성가능한 모든 수를 구함 -> 연속성

=> 함수를 따로 구현 -> 1의 자리수부터 n의 값을 갱신하여 구함

 

import java.util.*;

public class Main{
    final static int max = 10000;
    public static int d(int num){
        int answer = num;
        while(num>0){
            answer += num%10;
            num /= 10;
        }
        return answer;
    }
    public static void main(String[] args) {
        //셀프넘버인지 판별하는 배열
        boolean[] isSelf = new boolean[max+1];
        Arrays.fill(isSelf, true);//다 참으로 시작

        for(int i =1; i<=max; i++){//하나의 숫자에서 생성가능한 모든 수를 구함
            int mid = i;
            while(true){
                int num = d(mid);
                if(num>10000) break;//결과가 범위를 넘어가면 while문 끝
                //이어서 계속 생성 가능
                isSelf[num] = false;
                //이어서 구하는 값 갱신
                mid = num;
            }

        }
        for(int i = 1; i<=max; i++){
            if(isSelf[i]) System.out.println(i);
        }
    }

}

 

 

연속성이 중요했던 문제이다