본문 바로가기
알고리즘 문제풀이/백준

[알고리즘/백준] 4673 셀프 넘버 - 자바(Java)

by jeonghaemin 2021. 10. 11.
728x90

문제

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

풀이 코드

  • d(n)은 생성자가 있는 수 이기때문에 d(n)이 아니라는 것은 생성자가 없는 셀프 넘버라는 뜻이다.
  • 1~10000 범위의 d(n)을 구한 다음 d(n)이 아닌 수를 출력한다.
  • StringBuilder를 사용하여 한번에 모아 출력함으로써 실행시간 단축.
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        boolean[] isSelfNumber = new boolean[10001];
        Arrays.fill(isSelfNumber, true);

        //1~10000 범위에서 d(n)을 찾는다.
        for (int i = 1; i <= 10000; i++) {
            int dn = i;
            int num = i;

            //자리수를 분해해서 더한다.
            while(num > 0) {
                dn += num%10;
                num = num/10;
            }

            if (dn <= 10000) {
                //d(n)은 셀프 넘버가 아니다.
                isSelfNumber[dn] = false;
            }
        }

        StringBuilder sb = new StringBuilder();

        for (int i = 1; i <= 10000; i++) {
            if (isSelfNumber[i]) {
                sb.append(i).append("\n");
            }
        }

        System.out.println(sb);
    }
}

댓글