파이썬으로 수학문제 풀기- 프로젝트 오일러(project euler, 22번부터)

프로젝트 오일러 38번 - Pandigital multiples

예를 들어 어떤수 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()함수를 호출해서 확인해주면 됩니다.

댓글

댓글 본문