통계, IT, AI

4. Largest palindrome product 본문

IT/PROJECT_EULER

4. Largest palindrome product

Harold_Finch 2016. 1. 4. 13:40

문제는 이곳에서 확인할 수 있다. 

어떤 세자리수를 곱하여 만들 수 있는 가장 큰 palindromic number를 찾자. 이때 palindrome은 앞으로 읽으나 뒤로 읽으나 같은 문자열을 가르킨다.

# -*- coding: utf-8 -*-
# ver 1.0
palindrome = [ x*y for x in range( 999, 99, -1 )
				   for y in range( x, 99, -1 )
				   if str(x*y) == str(x*y)[::-1] ]

print max( palindrome )

사람들의 코드를 보니 더 나은 아이디어가 있어 이를 소개한다.

6자리의 palindrome \( n\)은 아래와 같이 표현된다.

\(n = 100000x + 10000y + 1000z + 100z + 10y + x \)
  \(= 100001x + 10010y + 1100z \)
  \(= 11( 9091x + 910y + 100z ) \)

즉, \(n\)은 11의 배수이다. 이를 이용하여 코드를 작성하면 검사해야 할 숫자를 절반가깝게 줄일 수 있다.

# ver 1.1
palindrome = [ x*y for x in range( 990, 109, -11 )
				   for y in range( 999, 99, -1 )
				   if str(x*y) == str(x*y)[::-1] ]

print max( palindrome )

답은 906609이다.

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

6. Sum square difference  (0) 2016.01.10
5. Smallest multiple  (0) 2016.01.07
3. Largest prime factor  (0) 2016.01.04
2. Even Fibonacci numbers  (0) 2015.12.28
1. Multiples of 3 and 5  (0) 2015.12.21
Comments