문제
https://www.acmicpc.net/problem/10610
풀이
우선 주어진 숫자들의 조합으로 30의 배수를 만들 수 있는지를 판단해야 한다.
30의 배수는 3의 배수이면서 일의 자리가 0인 수이고, 3의 배수는 각 자리 수의 합이 3의 배수인 수이므로
주어진 숫자에 '0'이 포함되고, 각 자리 수의 합이 3의 배수가 된다면 주어진 숫자들의 조합으로 30의 배수를 만들 수 있다.
이 경우, 일의 자리에 0이 위치하기만 하면 숫자를 어떤 순서로 배열하든 상관없이 항상 30의 배수가 되기 때문에, 가장 큰 수를 만들고 싶다면 주어진 숫자들을 내림차순으로 정렬하면 된다.
N = list(input())
# 30의 배수 : 3의 배수이면서 일의 자리가 0인 수
# 3의 배수 : 각 자리 수의 합이 3의 배수인 수
sum = 0
for n in N :
sum += int(n)
if sum % 3 != 0 or '0' not in N : # 30의 배수가 아니다.
print(-1)
else :
# 30의 배수가 될 수 있는 경우 중 가장 큰 수를 만들기 위해서는 등장하는 숫자들을 모두 내림차순으로 정렬하면 된다.
N.sort(reverse = True)
answer = ''
for n in N :
answer += n
print(int(answer))
728x90