A palindromic number reads the same both ways.
The largest palindrome made from the product of two 2-digit numbers is
9009 = 91 * 99
Find the largest palindrome made from the product of two 3-digit numbers
3자리 숫자 2개의 곱으로 만들 수 있는 가장 큰 palindrome을 구하는 문제이다.
내가 세운 계획은 다음과 같다.
먼저 palindrome인지 확인해주는 함수다.
//Python
def isPalindrome (n) :
reverse_num = 0
num = n
while num > 0:
remainder = num % 10 # 1의 자리를 구한 후
reverse_num = reverse_num * 10 + remainder # reverse_num에 더한 후 10을 곱하는 것을 반복
num = num // 10 # 10으로 나눈 후의 1의 자리 수 = 다음 자릿 수 구하기
if reverse_num == n:
return True
return False
n이 palindrome 일 경우 True를 출력 하고 아니라면 False를 출력해준다.
그리고 a, b 의 곱을 전부 구해서 그 값이 palindrome일 경우 list에 추가해주는 코드를 작성했다.
a = 100
palindromes = []
while a < 1000 :
b = 100 # a가 1 커질때 마다 100 부터 다시 시작해야 함
while b < 1000:
if isPalindrome(a*b) :
palindromes.append(a*b)
b += 1
a += 1
이제 완성된 list를 정렬한 후 pop()을 실행해주면 답을 알아낼 수 있다.
answer = sorted(palindromes).pop()
print(answer)
>>> 906609
답은 잘 나온 것 같지만 무언가 좀 아쉽다...
문제에서 보여준 것 처럼 N = a * b의 형태로 출력이 된다면 더 좋을 것 같다.
그래서 최종적으로 다음과 같이 작성하였다.
a = 100
palindromes = []
def isPalindrome (n) :
reverse_num = 0
num = n
while num > 0:
remainder = num % 10
reverse_num = reverse_num * 10 + remainder
num = num // 10
if reverse_num == n:
return True
return False
while a < 1000 :
b = 100
while b < 1000:
if isPalindrome(a*b) :
palindromes.append((a*b, a, b)) # a,b의 값도 출력에 활용하고 싶으니 묶어서 튜플로
b += 1
a += 1
largest = sorted(palindromes).pop()
answer = f"{largest[0]} = {largest[2]} * {largest[1]}"
print(answer)
>>> 906609 = 913 * 993
원하던 형식의 출력이 나왔으니 오늘은 여기까지.
-2024.12.23-