백준 10610 30 문제풀이 (JAVA)

문제 링크

문제


어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력


N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력


미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

풀이


3의 배수가 되려면 각 자리수의 합이 3의 배수여야 한다. 예를들어 102는 1 + 0 + 2 = 3이니 3의 배수다. 또한, 2 자리수 이상이면서 자리수에 0이 있어야 10의 배수가 성립된다. 따라서 자리수 합이 3의 배수면서 각 자리수를 오름차순으로 정렬을 했을 때 맨 처음에 0이 와야 30 의 배수가 될 수 있다고 볼 수 있다.

소스코드


import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		String k = scan.next();
		int arrInt[] = new int[k.length()];
		int arrTotalCount = 0;
		for (int i = 0; i < k.length(); i++) {
			arrInt[i] = k.charAt(i) - 48;
			arrTotalCount += arrInt[i];
		}
		Arrays.sort(arrInt);
		if ((arrTotalCount % 3 == 0)&&(arrInt[0]==0)) {
			for(int i = k.length()-1;i>-1;i--) {
				System.out.print(arrInt[i]);
			}
		} else {
			System.out.println(-1);
		}

	}
}

0개의 댓글