# BOJ10610 30
https://www.acmicpc.net/problem/10610 (opens new window)
미르코는 양수 길거리에서 양수 N을 발견하였다. 미르코는 30이란 수를 존경하기 때문에, 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶다.
# 30의 배수가 되기 위한 조건
30
은 10
과 3
이란 숫자를 곱하여
만들 수 있다. 결국 양수 N
은 10
과 3
으로 나누어지면 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");
}
}
}