핵심) 30의 배수가 될 수 있는 경우의 수 생각하기.
30은 3 * 10으로 표현할 수 있습니다. 따라서 3과 10의 공배수임을 확인하면 되는데,
10의 배수는 반드시 뒤에 0으로 끝나고, 3의 배수는 수의 모든 자리수 값의 합이 3의 배수입니다.
따라서, 주어진 값 중 0이 있는지 확인하고 모든 자리 수 값을 더하는 작업만 해주면 됩니다.
char[] N = bfr.readLine().toCharArray();
int sum = 0;
boolean is10x = false;
for (int i = 0; i < N.length; i++) {
sum += N[i];
if (N[i] == '0')
is10x = true;
}
입력된 수를 하나하나 살펴보며 0이 있는지 확인하고 값을 더합니다.
if (is10x && sum % 3 == 0) {
Arrays.sort(N);
for (int i = N.length - 1; i >= 0; i--) {
bfw.write(N[i]);
}
} else
bfw.write("-1");
bfw.flush();
bfw.close();
bfr.close();
만약 주어진 숫자에 0이 없거나, 3의 배수가 아니라면 30의 배수로 나타낼 수 없으므로 "-1",
나타낼 수 있다면 숫자를 오름차순으로 정렬 후 뒤에서부터 읽어 가장 큰 값을 만들어 냅니다.
Collections.sort를 활용하여 오름차순 정렬을 하거나, 직접 오름차순 정렬을 구현하여도 됩니다. 다만 컬렉션을 사용할 경우 List 형식으로 나타내야 하는 불편함이 있습니다.