白駿10610号:30



質問リンク
悩んでいても仕方がないので、最後にgooglingで他の人の方法を確認しました.コアは、1桁あたりの和が3の倍数で、0を含む場合は大数から割り振るとよい.リュックサックが短すぎるせいか、いつもこのような基礎的な数学で解く必要がある問題で阻まれています...良い開発者になるためには、ある程度の数学の勉強も必要です.

Javaを使用した解答

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class BaekJoon10610 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String n = br.readLine();
		int[] nArr = new int[n.length()];	//각 자리수를 넣을 배열 생성
		int sum = 0;						//각 자리수의 합이 3의 배수인지 확인하기 위한 변수
		boolean hasZero = false;			//0을 포함하고 있는지 확인하기 위한 변수
		
		for(int i = 0 ; i < n.length(); i++) {
			nArr[i] = Character.getNumericValue(n.charAt(i)); //각 자리수를 정수형으로 변환하여 배열에 넣음
			sum += nArr[i];									  //sum에 각 자리수를 더해줌
			if(nArr[i] == 0 && hasZero == false) {			  //0을 포함하고 있다면 hasZero = true
				hasZero = true;
			}
		}
		
		Arrays.sort(nArr);									  //오름차순 정렬
		
		if(sum % 3 == 0 && hasZero) {						  //각 자리수의 합이 3의 배수이고 0을 포함하고 있다면
			for(int i = n.length() - 1; i >= 0; i--) {		  
				bw.write(nArr[i] + "");						  //큰 수부터 차례대로 배치하여 출력 후 종료
			}
			bw.flush();
			return;
		}
		
		System.out.print(-1);							//아닐 경우 -1 출력
	}
	
}

ふくガス


また、BufferWriterに整数型を入力すると、正常に出力できないことを忘れました.正常に出力するために、String.valueOf関数を使用するか、上記のようにスペースを追加します.