https://www.acmicpc.net/problem/10610
배수판정법을 이용해서 문제를 풀 수 있었다. 배수판정법은 이 의 배수임을 판단할때 의 이론적 성질을 이용해서 판단하는 방법이다.
의 배수 판정법은
1. 각자리 수의 합이 3의 배수이다.
2. 1의 자리가 0이다.
이 두가지를 이용해서 풀 수 있다.
입력받은 값에서 0이 있고, 각 자리의 합이 3의 배수인지 판단했을때 참이라면 30의 배수가 될 수 있는 수이다. 여기서 내림차순으로 정렬하면 가장 큰 값을 알 수 있다.(양수이기에 가능하다)
from sys import stdin
input = stdin.readline
n = list(input())
sum = 0
zero = False
#각자리수를 sum에다가 더하고, 0이 있는지 판단한다.
for i in range(len(n)-1):
sum += int(n[i])
if n[i]=='0':
zero = True
#sum이 3의 배수이고, 0이 있다면 30의 배수가 될 수 있다는 소리이다.
if zero and sum%3==0:
#내림차순으로 정렬해서 가장 큰 수를 만든다.
n.sort(reverse=True)
print(''.join(n))
else:
print(-1)