본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 10610번: 30 -Python

728x90

[백준알고리즘] 10610번: 30 -Python

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

 

10610번: 30

문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다. 미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라. 입력 N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다. 출력 미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는

www.acmicpc.net

만들 수 있는 30의 배수 중에서 가장 큰 수를 출력해야 한다.

 

여기서 배수 판정법을 이용하면 된다. 30의 배수는 10의 배수이기 때문에 마지막 1의 자리가 무조건 0이 되어야 한다. 또한 30의 배수는 3의 배수이기 때문에 3의 배수 판정법에 따라서 모든 자리의 수의 합이 3의 배수가 되어야 한다.

 

이 경우에 해당하지 않는 경우 -1을 출력하도록 해주었고, 만족하는 경우에는 각 자릿수들을 역순으로 정렬해서 출력해줌으로써 가장 큰 수를 출력하도록 했다.

 

import sys
 
n = list(sys.stdin.readline().rstrip())
n.sort(reverse=True)
if n[-1] != '0' or sum(map(int, n)) % 3 != 0:
    print(-1)
else:
    print(''.join(n))

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

 
 
728x90