[10610号:30]-Sliver 5


質問する
リンクテキスト
ある日、ミルコは偶然街で羊水Nを見た.ミルコは30という数字を尊敬しているので、街で見つけた数字を混ぜて、30の倍数で最大の数字を作りたいと思っています.
ミルコが作成したい数を計算するプログラムを作成するのを助けます.
入力
N入力を受け付けます.Nは最大105個の数字からなり、0で始まることはない.
しゅつりょく
ミルコが作りたい数字があれば、その数字を出力します.その数が存在しない場合は-1を出力します.
コード#コード#
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str =br.readLine();
        int[] list = new int[str.length()];
        int allSum = 0;
        for(int i=0; i<list.length; i++){
            list[i] = str.charAt(i)-'0'; // 자릿수
            allSum += list[i]; // 자릿수들의 합
        }

        Arrays.sort(list); // 오름차순 정렬

        StringBuilder sb = new StringBuilder();
        // 자릿수들의 합이 3의 배수이고, 0이 포함되어 있는지
        if(allSum%3==0 && list[0]==0){
            for(int i=list.length-1; i>=0; i--){
                sb.append(list[i]);
            }
        }else{
            sb.append(-1);
        }
        System.out.println(sb.toString());
    }
}
と知る
3の倍数の数字がそれらの桁数を足し終わると3の倍数になります.
ex) 123 -> 1+2+3 = 6
上の問題は30の倍数なので、必ず0があります.したがって、条件文(if(all sum%3==0&list[0]==0)を使用して、数値の桁数の和が3の倍数であり、これらの数値リストに0が含まれているかどうかを決定します.