10610번 : 30 - Python

FriOct·2023년 5월 3일
0

PS

목록 보기
88/108

문제

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

풀이

배수판정법을 이용해서 문제를 풀 수 있었다. 배수판정법은 mmnn의 배수임을 판단할때 nn의 이론적 성질을 이용해서 판단하는 방법이다.

3030의 배수 판정법은
1. 각자리 수의 합이 3의 배수이다.
2. 1의 자리가 0이다.

이 두가지를 이용해서 풀 수 있다.
입력받은 값에서 0이 있고, 각 자리의 합이 3의 배수인지 판단했을때 참이라면 30의 배수가 될 수 있는 수이다. 여기서 내림차순으로 정렬하면 가장 큰 값을 알 수 있다.(양수이기에 가능하다)

코드

from sys import stdin

input = stdin.readline

n = list(input())
sum = 0
zero = False

#각자리수를 sum에다가 더하고, 0이 있는지 판단한다.
for i in range(len(n)-1):
    sum += int(n[i])
    if n[i]=='0':
        zero = True

#sum이 3의 배수이고, 0이 있다면 30의 배수가 될 수 있다는 소리이다.
if zero and sum%3==0:
    #내림차순으로 정렬해서 가장 큰 수를 만든다.
    n.sort(reverse=True)
    print(''.join(n))
else:
    print(-1)
profile
꿈 많은 개발자

0개의 댓글