문제

양수 N(최대 105개의의 숫자)가 있을 때 그 수의 조합을 섞어 가장 큰 30의 배수를 만들어 출력하는 문제. 30의 배수가 만들어지지 않으면 -1을 출력한다.



접근방법

  1. 3의 배수는 각 자리수의 합이 3의 배수이며, 10의 배수는 끝이 0으로 끝나는 것을 이용한다.

    • 즉, 각 자리수를 더한 합이 3의 배수이며 0이 포함되어있으면 30의 배수를 만들 수 있는 수이다.

    • 위의 식이 성립하지 않으면 -1을 출력한다.

  2. 배열을 정렬한 뒤 가장 뒤에서부터 출력하면 가장 큰 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);
      }

  }


+ Recent posts