통계, IT, AI

38. Pandigital multiples 본문

IT/PROJECT_EULER

38. Pandigital multiples

Harold_Finch 2017. 4. 22. 23:56

1. 개요

  문제는 이곳에서 확인할 수 있다. 192를 1, 2 그리고 3과 곱하면 각각 192, 384, 567이고 이 숫자들을 순서대로 연결하면 192384567이 된다. 192384567는 1부터 9까지의 숫자가 한번씩만 나오는 pandigital이며 이 숫자를 192, (1,2,3)으로 표현하자. 이와 같은 방식으로 918273645는 9, (1,2,3,4,5)로 표현할 수 있다. 1부터 9까지의 pandigital 중에 x, (1,2,,n)으로 표현할 수 있는 가장 큰 수를 구하는 것이 목표이다. 단, n>1이다.


2. 구현

  x에는 하한선과 상한선이 존재한다. 하한선은 1이며, n은 1보다 큰 정수이므로 상한선은 4자리 숫자이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- coding: utf-8 -*-
 
max_pandigital = 0
 
for x in range(1, 9999):
    pandigital_candidate, i = '', 1
 
    while len(pandigital_candidate) < 9:
        pandigital_candidate += str(i * x)
        i += 1
 
    digit_set = set(pandigital_candidate)
    if len(pandigital_candidate) != 9 or len(digit_set) != 9 or '0' in digit_set:
        continue
 
    print('PANDIGITAL FOUND: {pandigital}, {x}, {integers}'.format(
        pandigital=pandigital_candidate, x=x, integers=list((range(1, i)))))
 
    max_pandigital = max(max_pandigital, int(pandigital_candidate))
 
print('ANSWER: {answer}'.format(answer=max_pandigital))

답은 932718654이다.

'IT > PROJECT_EULER' 카테고리의 다른 글

40. Champernowne's constant  (0) 2017.04.26
39. Integer right triangles  (0) 2017.04.23
37. Truncatable primes  (0) 2017.04.20
36. Double-base palindromes  (0) 2017.04.09
35. Circular primes  (0) 2017.03.19
Comments