[백준][파이썬] 10610번. 30

문제

https://www.acmicpc.net/problem/10610

 

풀이

우선 주어진 숫자들의 조합으로 30의 배수를 만들 수 있는지를 판단해야 한다.

 

배수 판정법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 배수 판정법은 배수인지 확인하려는 수의 배수가 맞는지 간단히 확인하는 절차이다. 일반적으로 정수 m , n {\displaystyle m,n} 에 대해 m {\displaystyle m} 이 n {\displaysty

ko.wikipedia.org

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