Algorithm/정렬(Sort)

[백준 10610번] 30 (Java 풀이)

agility 2020. 2. 9. 00:28

백준알고리즘 10610번 : 30

 

주어진 숫자를 30의 배수, 그 중에서도 가장 큰 수가 되도록 정렬하는 문제이다.

만약 30의 배수가 되지 못하는 숫자가 주어진다면 -1을 출력하기로 한다.

 

숫자를 string 배열으로 받은 뒤, 이를 split해서 int배열에 담았다.

해당 int 배열을 내림차순으로 정렬해서 출력하면 되지만,

먼저 30의 배수가 되는 조건을 충족시키지 못할 때의 조건식을 넣어주도록 한다.

 

30의 배수가 되려면 3의 배수이면서, 10의 배수여야한다.

10의 배수가 되기 위한 조건은 int 배열내에 숫자 0이 하나라도 있으면 되는 것이고,

3의 배수가 되기 위한 조건은 int 배열내의 숫자들의 합의 3의 배수여야한다는 것이다.

 

filtering을 마친 뒤에 정렬 및 출력을 하면 된다.

 

풀이 과정


1. 숫자를 자리수별로 나누어 정수 배열에 담는다. 
2. 30의 배수로 만들 수 없는 조합은 거른다.(0이 없거나, 자리수의 합이 3이 안되거나)
3. 30의 배수가 되는 숫자는 정렬하여 내림차순으로 출력한다.

 

 

 

소스 ▽

더보기
import java.util.Arrays;
import java.util.Scanner;

public class Main {// 10610번 30
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String num = sc.nextLine();
		String[] arr = num.split("");
		int[] arr2 = new int[arr.length];

		boolean zero = false;
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			arr2[i] = Integer.parseInt(arr[i]);
			sum += arr2[i];
			if (arr2[i] == 0) {
				zero = true;
			}
		}
		if (zero == false || sum % 3 != 0) {
			System.out.println("-1");
		} else {
			Arrays.sort(arr2);
			for (int i = arr2.length - 1; i >= 0; i--) {
				System.out.print(arr2[i]);
			}
		}

	}
}