파이썬_실전 프로젝트

4번문제 - 팰린드롬 수

Q-004

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.

팰린드롬이란 좌우대칭의 숫자를 말합니다. 세자리의 두 숫자를 곱해서, 가장 큰 팰린드롬 수를 찾으라는군요,,

 

solve

일단 수학적 배경없이 떠오르는 방법은,,

1. 두숫자의 곱을 루프를 돌려서 만들고,

2. 루프안에서 각 숫자를 팰린드롬 체크 함수를 만들어서 확인한다.

정도가 되겠네요.

 

그래서, 루프 두개로 숫자의 곱을 만든다음에, 루프내에서 팰린드롬 숫자인지를 체크하는 함수를 호출해 보겠습니다.

1. 루프를 만들어서 두 숫자의 곱을 만듭니다.

i=900
while i<1000:
    j=900
	while j<1000:
		print(i*j)
		j=j+1
	i=i+1

900부터 시작해서 만개 정도의 숫자가 출력이 됩니다. 원래는 세자리수 두개를 다 곱하면 백만개가 나오는데, 일단은 테스트단계니깐 아무래도 짧은 루프가 좋겠죠. 혹시 답이 안나오면, 그땐 범위를 좀더 확장하고요.

함수를 호출해야 되니깐, 코드를 좀더 다듬어 보죠. 함수 이름은, is_palindrome(number) 로 하겠습니다.

def is_palindrome(number): #팰린드롬 체크 함수
    return True    #팰린드롬일 경우, True 리턴.

i=900
while i<1000:
	j=900
	while j<1000:
		product=i*j
		if is_palindrome(product):  #팰린드롬 체크 함수 호출 
			print(product,"is palindrome")
		j=j+1
	i=i+1

함수 호출부분을 if 문에다 바로 넣어줬습니다. 참일 경우 true를 return 하게 할려구요.

이상태로 실행하면 전부다 True기 때문에, 전부다 palindrome 이라고 나오겠죠.

 

이제 is_palindrome 함수를 만들어야 되겠네요.

어떻게 하면, palindrome 인지를 확인할수 있을까요,,

수학공식이나 알고리즘이 있는지는 모르겠지만, 일단 생각의 흐름대로 만들기로 하죠.

저는 넘어온 숫자를 문자로 변환한 다음에, 텍스트[0],텍스트[1],텍스트[2]형식으로 불러다가 각각 비교해서 True False를 리턴하도록 하겠습니다.

문자열 길이와, 루프문,조건문을 약간의 계산을 통해서 만들어 줬습니다.

def is_palindrome(number):
    text=str(number)  #텍스트로 변환
	size=len(text)-1  #루프돌릴 사이즈 계산
	i=0
	while i<size/2:  # 텍스트 길이의 절반만큼만 루프실행.
		if text[i]!=text[size-i]: #나머지 절반은 size-i로 읽어옴.
			return False  #다르면, False 리턴하고 함수종료.
		i=i+1
	return True  #이상없으면, True 리턴.

여기까지 했더니, 열몇개 정도의 팰린드롬 수만 출력이 됩니다.

이제, 마지막으로 그중 가장 큰값을 선택해야겠네요.


i=900;max_falindrome=0  #큰값 비교를 위한 변수. max_palindrome
while i<1000:
	j=900
	while j<1000:
		product=i*j
		if is_palindrome(product):
			print(product,"is palindrome")
			if product>max_falindrome:      #큰값비교문
				max_falindrome=product    #새로나온값이 더 크면, 업데이트
			print("max_falindrome is ",max_falindrome)
		j=j+1
	i=i+1

메인함수쪽 루프문 안에서, 그때그때 비교하는 구문을 넣어주고, 큰값을 계속 업데이트 해줍니다.

그러면 최종 max_palindrome 값이 우리가 원하는 결과가 되겠죠.

 

다른 방법이 많이 있을테니, 여러가지로 시도해 보시면 좋을것 같습니다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
노마드
현재 버전
선택 버전
graphittie 자세히 보기