문제
접근
그리디 알고리즘이다.
우선 30의 배수가 되려면 3의 배수인 동시에 10의 배수가 되어야 한다.
따라서, 3의 배수를 만족하기 위해 각 자리 수의 합이 3으로 나누어 떨어지는지 확인하고, 0이 한개라도 존재하는지 확인한다.
조건을 모두 만족한 경우에, 작은 수부터 뒷자리에 채워넣으면 된다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n = list(str(int(input())))
arr = [0] * 10
zeroCheck = False
sumCheck = 0
for item in n:
num = int(item)
arr[num]+=1
if num == 0:
zeroCheck = True
sumCheck += num
if sumCheck % 3 != 0 or not zeroCheck:
print(-1)
else:
ans = ''
for i in range(10):
if arr[i]:
ans = (str(i) * arr[i]) + ans
print(int(ans))