[백준] 10610번 : 30 - JAVA [자바]

가오리·2024년 1월 30일
0
post-thumbnail

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


그리디 알고리즘 문제이다.

30의 배수가 되는 조건이 두가지 있다.

  1. 3의 배수여야 한다. (각 자리수의 합이 3의 배수이면 이 수는 3의 배수이다.)
  2. 10의 배수여야 한다. (0이 있으면 된다.)
boolean yesTen = false;
int sum = 0;
for (int i = 0; i < charArray.length; i++) {
	numbers[i] = charArray[i] - '0';
    sum += numbers[i];
    if (numbers[i] == 0) yesTen = true;
}

if (sum % 3 != 0 || !yesTen) {
	System.out.println(-1);
    System.exit(0);
} else {
	Arrays.sort(numbers, Collections.reverseOrder());
    for (int n : numbers) {
    	System.out.print(n);
	}
}
  1. 수를 입력 받으며 각 자리수의 합을 더해준다.
  2. 수를 입력 받으며 0이 있는지 확인하다.

위의 두 조건을 만족하지 않으면 -1 을 출력하고 종료한다.

만족한다면 입력 받은 수를 값이 큰 수부터 내림차순으로 정렬하면 가장 큰 수를 만들 수 있으며 이 수가 정답이다.


public class bj10610 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String N = br.readLine();

        char[] charArray = N.toCharArray();
        Integer[] numbers = new Integer[charArray.length];

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

        if (sum % 3 != 0 || !yesTen) {
            System.out.println(-1);
            System.exit(0);
        } else {
            Arrays.sort(numbers, Collections.reverseOrder());
            for (int n : numbers) {
                System.out.print(n);
            }
        }

        br.close();
    }
}
profile
가오리의 개발 이야기

0개의 댓글