백준 10610번: 30 (https://www.acmicpc.net/problem/10610)

 

설명

입력된 숫자들을 재조합하여 가장큰 30의 배수를 만드는 문제입니다.

일단 각 숫자 자릿수의 합이 3의 배수라면 전체 숫자는 항상 3의 배수가 된다는 정수론의 개념을 이해하고 문제를 풀 수 있습니다.  문제 에서는 30의 배수 이므로  각 자릿수의 합이 3인지 확인하고, 0이 포함되어 있는 경우에는 내림차순으로 출력하게 되면 정답을 구할 수 있습니다.

 

 

 

def sol():
	n = input()
	sum = 0
	for i in n:
		sum += int(i)

	if sum % 3 != 0 or len(n) <= 1 or '0' not in n: 	# '0' not in n 조건으로 출력초과에 안걸린다.
		print(-1)
		return None
	else:							#조건에 해당 될 경우
		result = list( map( int, n))			#내림차순으로 출력하여 최댓값 출력
		result.sort(reverse = True)                	
		result = list(map(str, result))
		result = int(''.join(result))
		print(int(result))
		return None
sol()
반응형

+ Recent posts