문제
양수 N(최대 105개의의 숫자)가 있을 때 그 수의 조합을 섞어 가장 큰 30의 배수를 만들어 출력하는 문제. 30의 배수가 만들어지지 않으면 -1을 출력한다.
접근방법
3의 배수는 각 자리수의 합이 3의 배수이며, 10의 배수는 끝이 0으로 끝나는 것을 이용한다.
즉, 각 자리수를 더한 합이 3의 배수이며 0이 포함되어있으면 30의 배수를 만들 수 있는 수이다.
위의 식이 성립하지 않으면 -1을 출력한다.
배열을 정렬한 뒤 가장 뒤에서부터 출력하면 가장 큰 30의 배수를 출력할 수 있다.
소스코드
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
String input = sc.next();
int[] N = new int[input.length()];
int sum = 0; // 숫자들의 합
boolean isZero = false; // 0존재 여부
for(int i=0; i<input.length(); i++){
N[i] = Integer.parseInt(input.charAt(i)+"");
sum += N[i];
if(N[i] == 0)
isZero = true;
}
Arrays.sort(N);
if(sum%3 == 0 && isZero){
for(int i=N.length-1; i>=0; i--)
System.out.print(N[i]);
}else{
System.out.print(-1);
}
}
'알고리즘' 카테고리의 다른 글
[JAVA] 백준 2512 : 예산 (0) | 2019.02.02 |
---|---|
[JAVA] 백준 3985 : 롤케이크 (0) | 2019.02.01 |
[JAVA] 백준 2980 : 도로와 신호등 (0) | 2019.01.21 |
[JAVA] 백준 2593 : 영역 구하기 (0) | 2019.01.20 |
[JAVA] 백준 1018 : 체스판 다시 칠하기 (0) | 2019.01.16 |