지나가던 개발자

[Python] 백준 10610번(30) 문제 풀이 본문

PS/Python

[Python] 백준 10610번(30) 문제 풀이

KwonYongHyeon 2022. 6. 13. 17:12

 

n = list(map(int, list(input())))
if "0" not in str(n):
    print(-1)
elif sum(n) % 3 != 0:
    print(-1)
else:
    print(str(sorted(n, reverse=True)).strip("[""]").replace(", ",""))

 

 https://ko.wikipedia.org/wiki/%EB%B0%B0%EC%88%98_%ED%8C%90%EC%A0%95%EB%B2%95

 

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

배수 판정법은 배수인지 확인하려는 수의 배수가 맞는지 간단히 확인하는 절차이다. 일반적으로 정수 m , n {\displaystyle m,n} 에 대해 m {\displaystyle m} 이 n {\displaystyle n} 의 배수인지 확인하려면 m {\di

ko.wikipedia.org

 

 (...)
29의 배수는 일의 자리 숫자를 3배하여 나머지 자리에서 더한 결과가 29의 배수인 수이다.
30의 배수는 3의 배수이면서 일의 자리가 0인 수이다.
31의 배수는 일의 자리를 3배하고 나머지 자리에서 뺀 값이 0 또는 31의 배수인 수이다.
(...)

 

 30의 배수를 구해야 하니 30의 배수 판정법을 알아보자. 위키백과 曰, 30의 배수는 3의 배수이면서 일의 자리가 0이어야 한단다. 그럼 0으로 끝나면 되고, 3의 배수는 각 자리수의 합이 3의 배수인 수이므로, 입력받은 N의 각 자리수의 합이 3의 배수인 수를 출력해야 한다. 그런데 그 중 가장 큰 수를 출력해야 한다. 가장 큰 수라면 내림차순으로 정렬해서 0으로 끝나기만 한다면 가장 큰 수가 된다. 아무렴 어떻게 배치해도 3의 배수니까 내림차순 배치가 가장 큰 수겠지. 그렇게 나온 코드가 위 코드이다.

Comments