풀이:
1. N이 3의 배수여야 하는데, 각 자리 숫자의 합이 3의 배수면 N은 3의 배수라고 할 수 있다.
ex) 810 은 8+1+0 = 9, 9가 3의 배수이므로 810은 3의 배수라고 할 수 있다.
2. 그리디가 정렬 과정에서 쓰였다.(큰 수부터 정렬하므로)
문제
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.
미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.
입력
N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.
출력
미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.
예제 입력 1 복사
30
예제 출력 1 복사
30
예제 입력 2 복사
102
예제 출력 2 복사
210
예제 입력 3 복사
2931
예제 출력 3 복사
-1
예제 입력 4 복사
80875542
예제 출력 4 복사
88755420
답:
import sys
n= sys.stdin.readline().strip()
#1. 30의 배수가 될 수 있는가?
##3의 배수인가?
num = 0
for i in n:
num = num + int(i)
if num % 3 == 0:
pass
else:
print(-1)
sys.exit()
##2와 5의 배수인가?
if '0' in n :
pass
else:
print(-1)
sys.exit()
#2. 수 만들기
box = []
for i in n:
box.append(i)
box.sort(reverse=True)
final = ''
for j in box:
final = final + j
print(final)