# BOJ10610 30

https://www.acmicpc.net/problem/10610 (opens new window)

미르코는 양수 길거리에서 양수 N을 발견하였다. 미르코는 30이란 수를 존경하기 때문에, 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶다.

# 30의 배수가 되기 위한 조건

30103이란 숫자를 곱하여 만들 수 있다. 결국 양수 N103으로 나누어지면 30의 배수라고 판단할 수 있다.

# 제출 코드

우선 입력 받은 숫자를 내림차순 정렬한다.

List<String> numbers = new ArrayList<>(Arrays.asList(number.split("")));

정렬 후 각 항목을 더한다.

int sum = numbers.stream()
        .mapToInt(Integer::parseInt)
        .sum();

가장 핵심 부분이다. 숫자 리스트에 0이 포함되고 합산한 sum이 3의 배수일 때 비로소 30의 배수를 만족한다. 만족할 때 리스트의 모든 숫자를 출력한다.

if (numbers.contains("0") && sum % 3 == 0) {
    StringBuilder stringBuilder = new StringBuilder();
    for (String s : numbers) {
        stringBuilder.append(s);
    }

    System.out.println(stringBuilder);
} else {
    System.out.println("-1");
}

아래는 최종 제출 코드이다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class BOJ10610 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String number = scanner.nextLine();
        List<String> numbers = new ArrayList<>(Arrays.asList(number.split("")));

        numbers.sort(Comparator.reverseOrder());

        int sum = numbers.stream()
                .mapToInt(Integer::parseInt)
                .sum();

        if (numbers.contains("0") && sum % 3 == 0) {
            StringBuilder stringBuilder = new StringBuilder();
            for (String s : numbers) {
                stringBuilder.append(s);
            }

            System.out.println(stringBuilder);
        } else {
            System.out.println("-1");
        }
    }
}
#algorithm #BOJ #수학 #문자열 #정렬 #정수론
last updated: 10/10/2021, 6:09:25 PM