본문 바로가기
Algorithm

[백준 Silver 5] 10610 30 - Java

by Ray 2021. 12. 23.

문제링크 : https://www.acmicpc.net/problem/10610

 

10610번: 30

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

www.acmicpc.net

 

접근 과정 : 

  • 우선 입력 숫자의 길이가 크기때문에, 문자열로 받아서 처리해야 한다.
  • 처음에는, 만들 수 있는 숫자의 조합을 모두 구하고, 큰 수부터 3의 배수인지 확인하려고 했다.
  • 문득!! 3의 배수는 각 자릿수의 합이 3으로 나누어떨어져야 한다는 것이 생각나더라!!!
  • 그래서 입력 숫자가 0을 포함하고 있고, 각 자릿수의 합이 3의 배수인지 확인했다.
  • 위의 조건이 만족하지 않으면 -1을 리턴하고, 만족하면 문자열을 정렬시켜 리턴했다!!!

 

소스 코드 및 결과 :

package BOJ;

/* 
    30
*/

import java.io.*;
import java.util.*;

public class BOJ10610 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        char[] numbers = br.readLine().toCharArray();

        int sum = 0;
        boolean zero = false;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] - '0' == 0) {
                zero = true;
            } else {
                sum += (numbers[i] - '0');
            }
        }

        if (!zero || sum % 3 != 0) {
            System.out.println(-1);
        }else{
            Arrays.sort(numbers);
            StringBuilder sb = new StringBuilder();
          
            System.out.println(sb.append(new String(numbers)).reverse());
        }

    }
}

 

P.S 

'각 자릿수의 합이 3의 배수이면, 그 수는 3의 배수' 와 같은 경우를 찾아보았다.

 

3 => 각 자릿수의 합이 3의 배수이면 해당 수는 3의 배수

4 => 100은 4의 배수이기에, 그 이하의 숫자만 확인하면 된다.

6 => 2와 3의 곱으로 이루어진 수

8 => 1000은 8의 배수, 그 이하의 숫자만 확인

9 => 각 자릿수의 합이 9의 배수

 

수학이란...