회문(palindrome)은 앞으로 읽거나 뒤로 읽어도 같은 것을 말한다. 두 자리 숫자의 곱으로 만들 수 있는 결과 중 가장 큰 값을 가지는 회문은 9009인데, 이는 91*99를 계산하는 것으로 얻을 수 있다.

세 자리 숫자의 곱으로 만들 수 있는 가장 큰 회문은 뭘까?

풀이 #1

#!/usr/bin/env python3

MIN_DIGIT3 = 100
MAX_DIGIT3 = 1000

palindrome = 0

def is_correct_palindrome(n):
    s = str(n)
    return s == s[::-1]
    
for a in range(MIN_DIGIT3, MAX_DIGIT3):
    for b in range(MIN_DIGIT3, MAX_DIGIT3):
        products = a * b
        if is_correct_palindrome(products) and palindrome < products:
            palindrome = products

print(palindrome)

이 문제를 풀기 위한 무슨 특별한 방법이 있는지는 잘 모르겠다. 예를 들어 회문을 얻거나 판별하는 특별한 계산 같은 것을 잘 몰라서 그냥 전부 곱해봤다.

회문이 맞는지를 확인하기 위해서는 단순히 문자열을 뒤집어보면 된다. 회문의 정의가 그런 거니까. 다행히 파이썬에서는 리스트를 반대로 순회하는 것이 매우 간단하므로, 받은 숫자를 문자열로 변환한 다음 그냥 반대로 순회한 리스트를 비교해본다. 같으면 회문이 된다.

뭔가 더 좋거나 우아한 방법이 있을 것 같다.