프로젝트 오일러 도전기 #4 (with 파이썬 프로그래밍공부)
문제
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.
세자리 수를 곱해 만들 수 있는 가장 큰 대칭수
앞에서부터 읽을 때나 뒤에서부터 읽을 때나 모양이 같은 수를 대칭수(palindrome)라고 부릅니다.
두 자리 수를 곱해 만들 수 있는 대칭수 중 가장 큰 수는 9009 (= 91 × 99) 입니다.
세 자리 수를 곱해 만들 수 있는 가장 큰 대칭수는 얼마입니까?
앞뒤로 똑같은 전화번호~bgm이 들리는거같다
문제는 간단한거 같은데 이걸 어떻게 구현하지? 가 관건이다.
접근아이디어
파이썬에서 문자열은 일종의 리스트취급을한다
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> a='dream' >>> a[1] #2번째 출력 'r' >>> a[1:3] #2번부터 3번까지 출력 're' >>> a[2::] #3번이후 출력 'eam' >>> a[-1] #뒤에서부터 1번 출력 'm' >>> a[:-1] #뒤1번부터 출력 'drea' >>> a[::-1] #뒤집어서 'maerd' | cs |
12번줄 처럼 list[::-1] 을하면 뒤에서부터 끝까지 출력하게된다.
즉 입력값을 문자로 바꾸고 -> 뒤집어준다음
원래값과 비교해주면 될꺼같다.
문자열로 변환하는 명령어는 str() 이다
int() 는 정수로 바꿔주는거고
float()은 소수점 까지 표현하는 실수형으로 바꿔주는 명령어이다.
1 2 3 4 5 6 7 8 9 10 11 12 | >>> a=100 >>> b=str(a) >>> a 100 >>> b '100' >>> a[1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError:
'int' object is not subscriptable >>> b[1] '0' | cs |
7번줄 처럼 숫자를 리스트 취급하면 에러가 난다
위의 아이디어를 조합하면
이렇게된다
1 2 3 4 5 | >>> a=5678 >>> b=str(a) >>> b=int(b[::-1]) >>> print(b) 8765 | cs |
가장 큰수를 찾는거니
999x999 부터 시작하는게 빠를것이다
for문도 거꾸로 해야되는데 거꾸로 출력하는방법은
range(시작,끝,step) 에서 step 부분을 음수로 잡는방법이다
아무 입력이 없으면 1로 인식한다.
1 2 3 4 5 6 7 8 9 10 11 | for i in range(999,99,-1) : for j in range(999,99,-1): a=i*j b=str(a) b=b[::-1] b=int(b) print(i,"x",j,"=",a,b) if a==b : break if a==b : break | cs |
댓글
댓글 쓰기