그리디 알고리즘 문제이다.
30의 배수가 되는 조건이 두가지 있다.
boolean yesTen = false;
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
numbers[i] = charArray[i] - '0';
sum += numbers[i];
if (numbers[i] == 0) yesTen = true;
}
if (sum % 3 != 0 || !yesTen) {
System.out.println(-1);
System.exit(0);
} else {
Arrays.sort(numbers, Collections.reverseOrder());
for (int n : numbers) {
System.out.print(n);
}
}
위의 두 조건을 만족하지 않으면 -1
을 출력하고 종료한다.
만족한다면 입력 받은 수를 값이 큰 수부터 내림차순으로 정렬하면 가장 큰 수를 만들 수 있으며 이 수가 정답이다.
public class bj10610 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
char[] charArray = N.toCharArray();
Integer[] numbers = new Integer[charArray.length];
boolean yesTen = false;
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
numbers[i] = charArray[i] - '0';
sum += numbers[i];
if (numbers[i] == 0) yesTen = true;
}
if (sum % 3 != 0 || !yesTen) {
System.out.println(-1);
System.exit(0);
} else {
Arrays.sort(numbers, Collections.reverseOrder());
for (int n : numbers) {
System.out.print(n);
}
}
br.close();
}
}