프로젝트 오일러 도전기 #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 1in <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
12
>>> for i in range(10,0,-1):
...     print(i)
10
9
8
7
6
5
4
3
2
1
cs



아이디어는 다 나왔으니 이를 조립하는 일만 남았다.

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





하지만 실패 ㅋㅋㅋ

생각해보니

지금 방식은

999 x 999
999 x 998
999 x 997
...
999 x 1

이렇게 되는 방법이라 999로 답이 나오면서 끝나버린다ㅋㅋ

그냥 리스트를 만들어 모든 값을 찾아넣어 그 중 최고값을 찾도록 하겠다


1
2
        if a==b :
            answer.append(a)
cs


값을 추가하는 명령어는 리스트.append(변수) 이고



1
print(max(answer))
cs


최고값을 찾는 법은 max(리스트) 명령어이다.






시간은 걸렸지만 클리어




댓글

이 블로그의 인기 게시물

프로젝트 오일러 도전기 #5 (with 파이썬 프로그래밍공부)

프로젝트 오일러 도전기 #6 (with 파이썬 프로그래밍공부)

프로젝트 오일러 도전기 #7