728x90

백준 10610 - 30

시간 제한 1초, 메모리 제한 256MB

# 조건

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

입력

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

출력

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

# 접근 방법

  • 우선 30의 배수가 되기 위해서는 1의 자리는 0이 되어야 한다.
  • 0이 없는 경우 -1을 출력해주고
  • 0이 존재하는 경우 나머지 수들의 합이 3의 배수가 되면 된다.
  • 나머지 수들의 합이 3의 배수가 되었고, 일의 자리가 0이라면, 30의 배수가 가능하므로 가장 큰 수부터 정렬하면 된다.
import sys  
sys.stdin = open('input.txt')  
input = sys.stdin.readline  


num = input().rstrip()  

if not '0' in num:  
    print(-1)  
else:  
    temp = 0  
    for i in range(len(num)):  
        temp += int(num[i])  
    if temp % 3 == 0:  
        print(int(''.join(sorted(num, reverse=True))))  
    else:  
        print(-1)
728x90