백준 10610 30 문제풀이 (JAVA)

0

문제 링크

문제


어느 날, 미르코는 우연히 길거리에서 양수 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개의 댓글