파이썬_실전 프로젝트

프로젝트 오일러 4번문제 - 팰린드롬 수

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

 

Largest palindrome product

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.

 

두개의 루프를 순환하면서, 두수의 곱을 만들고, 팰린드롬인지 체크하면 될것 같습니다. 팰린드롬인지 체크는 문자열을 slice하는 기능을 활용하면 뒤집을수 있는 기능이 있는데, 이걸 활용해서 확인을 하겠습니다.

 

세자리 두수의 곱
for i in range(900,1000):
    for j in range(900,1000):
        print(i*j,end=',')
810000,810900,811800,812700,813600,814500,815400,816300,817200,818100,819000,819900,820800,821700,822600,823500,824400,825300,826200,827100,828000,828900,829800,830700,831600,832500,833400,834300,835200,836100,837000,837900,838800,839700,840600,841500,842400,843300,844200,845100,846000,846900,847800,848700,849600,850500,851400,852300,853200,854100,855000,855900,856800,857700,858600,859500,860400,861300,862200,863100,864000,864900,865800,866700,867600,868500,869400,870300,871200,872100,873000,873900,874800,875700,876600,877500,878400,879300,880200,881100,882000,882900,883800,884700,885600,886500,887400,,,,,,,

가장 큰값을 찾는것이기 때문에, 세자리수중 900번대서부터 시작하면 됩니다.

 

함수 만들기-1
def isPalindrome(param):
    return True

for i in range(900,1000):
    for j in range(900,1000):
        product = i*j
        if isPalindrome(product):
            print(product,"is Palindrome",end=',')
810000 is Palindrome,810900 is Palindrome,811800 is Palindrome,812700 is Palindrome,813600 is Palindrome,814500 is Palindrome,815400 is Palindrome,816300 is Palindrome,817200 is Palindrome,818100 is Palindrome,819000 is Palindrome,819900 is Palindrome,820800 is Palindrome,821700 is Palindrome,822600 is Palindrome,823500 is Palindrome,824400 is Palindrome,825300 is Palindrome,826200 is Palindrome,827100 is Palindrome,828000 is Palindrome,828900 is Palindrome,,,,,,,,,

 아직 함수를 만들지 않았기 때문에, 제대로 동작하지 않습니다.

 

팰린드롬 판단하기
def isPalindrome(param):
    string = str(param)
    string2= string[::-1]
    if string == string2:
        return True
    return False

maxValue = 0
for i in range(900,1000):
    for j in range(900,1000):
        product = i*j
        if isPalindrome(product):
            print(product,"is Palindrome")
            if product>maxValue:
                maxValue = product
print(maxValue)
819918 is Palindrome
824428 is Palindrome
819918 is Palindrome
906609 is Palindrome
824428 is Palindrome
886688 is Palindrome
861168 is Palindrome
888888 is Palindrome
861168 is Palindrome
888888 is Palindrome
886688 is Palindrome
906609 is Palindrome
906609

string을 뒤집는 명령은 string[::-1] 입니다. 원래는 slice 기능인데, 읽는 방향을 -1로 지정해주면 문자열이 반대로 뒤집힙니다. True가 반환된 값들은 크기를 판단해서 max변수로 계속 업데이트 해주면, 마지막 max값이 최종 결과값이 됩니다.

댓글

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