[그림 01] Problem 004 문제
문제를 살펴보면 다음과 같습니다.
문제 이름 : 가장 큰 데칼코마니 숫자
문제 내용 : Palindromic 숫자란 앞으로 읽나 뒤로 읽나 같은 숫자를 의미합니다. 두 자리 숫자 두 개로 만들어진 가장 큰 Palindromic 숫자는 9009 = 91 x 99입니다. 그렇다면 세 자리 숫자 두 개로 이루어진 Palindromic 숫자 중 가장 큰 숫자를 찾으십시오.
※ palindrome 이란 앞에서부터 읽나 뒤에서부터 읽나 똑같은 것을 의미함(madam, nurse run 과 같은 것)
우리는 다음과 같은 조건을 가진다는 것을 알 수 있습니다.
1. 3자리 숫자 두 개를 곱해서 생성된 숫자를 Palindromic 숫자인지 구분해야 함
2. 범위는 999 * 999의 가지 수를 가짐
이제 소스코드를 작성해보도록 합시다.
뭔가 발코드인 느낌도 나고... 아니면 괜히 복잡하게 작성한 것 같을 수 있습니다.
def judgePalindromic(palinNum): palinNumList = list(str(palinNum))#palindromic 숫자를 확인하기 위한 숫자 구분 palinNumLen = len(palinNumList) #palindromic 숫자의 길이 for i in range(int(palinNumLen / 2)): #palindromic 숫자의 맨 앞과 맨 끝의 숫자를 비교함(길이가 홀수/짝수 상관 없음) if palinNumList[i] != palinNumList[-(i+1)]: return 0 return palinNum if __name__ == "__main__": Main_PalindromicNumber = 0 Main_Digits = [999, 999] #999 * 999의 가지 수 Main_LimitRange = 0 #999 ~ LimitRange를 정해줌 #Main_Digits[0] x Main_Digits[1]의 곱을 이중 for문으로 작성 for i in range(Main_Digits[0], Main_LimitRange, -1): for j in range(Main_Digits[1], Main_LimitRange, -1): num = i * j #Palindromic숫자고, 이전의 Palindromic숫자보다 크면 Main_PalindromicNumber에 저장함 if judgePalindromic(num) and Main_PalindromicNumber < num: Main_PalindromicNumber = num print(Main_PalindromicNumber)
judgePalindromic(숫자) 함수는 Palindromic 숫자임을 확인해주는 함수입니다.
main함수에서는 세 자리 숫자의 두 개를 곱하여 Palindromic 숫자임을 확인하는 이중 for문을 작성하였고, if를 통해 (0이 아닌 값이 반환) and (이전의 숫자보다 크면 Main_PalindromicNumber에 저장)합니다.
이 모든 것들이 완료되면 출력하게 됩니다.
저보다 잘하는 사람은 겁나 많습니다.
사실 이쯤되면 조금 분하기도 합니다. 저는 겁나 길게 작성했는데 이 소스는 겁나 짧네요.
출처 : http://www.s-anand.net/euler.html
n = 0 for a in range(999, 100, -1): for b in range(a, 100, -1): x = a * b if x > n: s = str(a * b) if s == s[::-1]: n = a * b print(n)
맞다.... 그랬습니다. string값을 뒤집어서 그 값이랑 기존의 값이랑 비교하면 되는 것이었습니다.
굉장하다 이 소스...!!!
저는 바보같이 그것을 일일이 비교하였습니다.
s == s[::-1]은 기존의 string == 반대로 string입니다.
'PYTHON > Project Euler(프로젝트 오일러)' 카테고리의 다른 글
Problem_009_Special Pythagorean triplet (0) | 2017.01.20 |
---|---|
Problem_008_Largest product in a series (0) | 2017.01.09 |
Problem_007_10001st prime (0) | 2017.01.09 |
Problem_006_Sum square difference (0) | 2017.01.07 |
Problem_005_Smallest Multiple (0) | 2017.01.06 |
Problem_003_Largest prime factor (0) | 2016.12.30 |
Problem_002_Even Fibonacci numbers (0) | 2016.12.28 |
Problem_001_Multiples of 3 and 5 (0) | 2016.12.28 |