한참을 고민해봐도 방법이 떠오르지 않아 결국 구글링을 통해 다른 분들의 방법을 확인하여 풀었다. 핵심은 각 자리수의 합이 3의 배수이며 0을 포함하고 있을 때 큰 수부터 배치하면 된다는 것. 가방끈이 짧아서 그런지 항상 이렇게 기초적인 수학을 이용하여 풀어야 하는 문제들에서 막힌다... 좋은 개발자가 되기 위해서는 어느정도의 수학 공부도 필수인 듯 하다.
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 함수를 사용하거나 위처럼 공백을 더해주어야 한다.