Baekjoonアルゴリズム | 4673番問題: セルフナンバー

出典

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

問題

Baekjoon Online Judgeの4673番問題、セルフナンバーを解きます。

入力

正確な入力形式と制約は元の問題文に従います。

出力

問題で求められる答えを出力します。

サンプル入力 1

サンプル出力 1

1 3 5 7 9 20 31 42 53 64 | | <-- a lot more numbers | 9903 9914 9925 9927 9938 9949 9960 9971 9982 9993

アルゴリズム分類

  • 数学
  • 実装
  • 全探索

解説

import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {

        Set<Integer> notSelfNumber = new HashSet();
        for(int i = 1; i <= 10000; i++) {
            int sum = i;

            if(i < 10){
                sum += i;
            } else {
                int length = String.valueOf(i).length();
                for(int j = 1; j <= length; j++){
                    if(j == 1){
                        sum += i % 10;
                    } else {
                        int y = 1;
                        for(int x = 1; x < j; x++) {
                            y = y * 10;
                        }
                        sum += (i / y) % 10;
                    }
                }
            }
            notSelfNumber.add(sum);
        }

        for(int i = 1; i <= 10000; i++) {
            if (notSelfNumber.contains(i)) {
                continue;
            }
            System.out.println(i);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        boolean[] notSelfNumber = new boolean[10000];
        for (int i = 1; i <= 10000; i++) {

            int sum = i;
            int n = i;
            while (n != 0) {
                sum += (n % 10);
                n /= 10;
            }

            if (sum - 1 < notSelfNumber.length) {
                notSelfNumber[sum - 1] = true;
            }
        }

        for (int i = 0; i < 10000; i++) {
            if(notSelfNumber[i] == true){
                continue;
            }
            System.out.println(i + 1);
        }
    }
}