본문 바로가기
코딩/백준-자바

[자바] 백준 10610번: 30

by 철없는민물장어 2023. 1. 2.
728x90
반응형

https://www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

 


3의 배수의 특성을 알면 간단하게 풀 수 있다.

 

N의 모든 자릿수의 값을 더한 값이 3의 배수이면 N는 3의 배수이다.

문제에서는 3의 배수가 아니라 30의 배수여야 하는데,

3의 배수인 숫자에 0 하나 붙여주면 간단하게 30의 배수를 만들 수 있다. 따라서

 

  • 모든 자릿수의 합이 3의 배수 
  • 숫자에 0이 존재 

두 조건을 만족시키면 된다.

 

가장 큰 수를 만들기 위해서는 각 자릿수의 값을 내림차순으로 정렬하면 된다.

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

public class P10610 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		String num=sc.next();
		Integer[] n = new Integer[num.length()];
		int sum=0;
		for(int i=0;i<num.length();i++) {
			n[i]=num.charAt(i)-'0';
			sum+=n[i];
		}

		Arrays.sort(n, Collections.reverseOrder());
		
		if(sum%3!=0 || n[num.length()-1]!=0) {
			System.out.println(-1);
			return;
		}
		for(int i:n) {
			System.out.print(i);
		}
	}

}
728x90
반응형

댓글