업데이트:

문제 링크

백준 10610번 - 30 (Silver 4)

문제 설명

주어진 수들로 만들 수 있는 가장 큰 30의 배수를 출력한다.
불가능하다면 -1을 출력한다.

정답 코드 및 설명

$30 = 3\times10$이다. 따라서 30의 배수를 만들려면 마지막 자릿수는 무조건 0이다.
3의 배수임을 판정하기 위해서는 각 자릿수의 합이 3의 배수인지를 확인하면 된다.
주어진 수를 모두 한번씩은 사용해야하는게 문제의 조건이므로, 맨 처음 입력받을 때 각 자릿수의 합을 계산해두면 된다.
처음 계산해둔 값이 3의 배수가 아니라면, 30의 배수를 만들 수 없다.
가장 큰 30의 배수를 만들기 위해서는 내림차순 정렬을 시행하면 된다. 0이 가장 작으므로 맨 끝에 오게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.*;
import java.util.Arrays;

public class BOJ10610 {

    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 n = br.readLine();
        int[] nInt = new int[n.length()];
        int three = 0, ten = 0;
        for (int i = 0; i < n.length(); i++) {
            nInt[i] = n.charAt(i) - '0';
            three += nInt[i];
            if (nInt[i] == 0)
                ten = 1;
        }
        if (three % 3 != 0 || ten == 0)
            sb.append(-1);
        else {
            Arrays.sort(nInt);
            for (int i = n.length() - 1; i >= 0; i--)
                sb.append(nInt[i]);
        }
        bw.write(sb.toString());
        bw.close();
    }

}

댓글남기기