본문 바로가기
코딩테스트 준비/백준

[백준] 10610번 - 30 [Java]

by mwzz6 2024. 12. 4.

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

 

[백준] 10610번 - 30 [Java]
[백준] 10610번 - 30 [Java]


1.  아이디어

 

30의 배수는 3의 배수면서 10의 배수라는 점을 활용하면 간단하게 해결할 수 있다.

3의 배수는 각 자릿수의 합이 3의 배수가 되고 10의 배수는 1의 자릿수가 0이라는 특징이 있는데 이 두가지를 모두 만족하면 30의 배수가 된다.


2. 문제풀이

 

각 자릿수를 저장하는 배열 nums, 0을 포함했는지 판단하는 변수 hasZero, 각 자릿수의 합을 저장하는 변수 sum을 선언하고 입력에 맞게 초기화해준다.

이후 0을 포함하면서 각 자릿수의 합이 3의 배수면 재배치로 30의 배수가 될 수 있으므로 nums를 정렬한 이후 역순으로 순회하며 가장 큰 수를 구해주고 30의 배수가 아니면 -1을 출력하는 방식으로 구현했다.


3. 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        String input = br.readLine();

        int[] nums = new int[input.length()];
        boolean hasZero = false;
        int sum = 0;

        for (int i = 0; i < input.length(); i++) {
            int num = input.charAt(i) - '0';
            if (num == 0) {
                hasZero = true;
            }

            nums[i] = num;
            sum += num;
        }

        if (hasZero && (sum % 3 == 0)) {
            Arrays.sort(nums);
            for (int i = nums.length - 1; i >= 0; i--) {
                sb.append(nums[i]);
            }
        } else {
            sb.append(-1);
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기