예를 들어 어떤수 192 를 1부터 3까지 각각 곱하면, 192, 384, 576 이 되고, 이 세 수를 이어 붙이면, 192384576 이 되는데, 이 수는 1부터 9까지 숫자가 한번씩 쓰인 Pandigital 이라는 특성을 가집니다.
문제는 어떤 정수를 1부터 n까지 연속으로 곱한후 이어붙여서 만들수 있는 9자리 Pandigital 수 중에서 가장 큰 수를 찾는것입니다.
Pandigital 검사
def is_pandigit(num): for i in "123456789": if i not in str(num): return False return True
1~9까지 수의 pandigital 인지를 확인할려면, 1부터 9까지의 숫자가 모두 들어있는지 확인해서 True를 리턴하고, 아니면 False를 리턴해주면 됩니다.
결과
def is_pandigit(num): for i in "123456789": if i not in str(num): return False return True for i in range(1,10000): number='';j=1 while len(number)<9: number=number+str(i*j) j+=1 if len(number)==9 and is_pandigit(number): print(number)
123456789 918273645 192384576 219438657 273546819 327654981 672913458 679213584 692713854 726914538 729314586 732914658 769215384 792315846 793215864 926718534 927318546 932718654
메인함수부분은 특별할거 없이, Brute Force로 모든 수를 다 확인해서 길이가 9자리가 안넘어가는 조건안에서, pandigital()함수를 호출해서 확인해주면 됩니다.