반응형

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

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

문제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.


풀이

배수판정법을 알고있다면 어렵지 않게 풀 수 있는 문제였다

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 {\displaysty

ko.wikipedia.org

30의 배수를 만들기 위해서는 모든 자리의 숫자의 값이 30의 배수가 되어야 하는데

예제 30의 경우

3 + 0 = 3으로 0의 자리는 더해지지 않기 때문에 30의 배수가 될 수 없다

그래서 3의 배수를 구한 후 받은 값에 '0'이 있는지 아닌지 판별하여 30의 배수인지 아닌지 구할 수 있었다.

python코드

# 10610 30

N = list(input())
hap = 0
for i in N:
    hap += int(i)

if '0' in N:
    if hap % 3 != 0:
        print(-1)
    else:
        N.sort()
        N.reverse()
        for i in range(len(N)):
            print(N[i],end='')
else:
    print(-1)
반응형

+ Recent posts