본문 바로가기
Program/Python(Project Euler)

Python :: Project Euler 4번 문제 풀이

by 시레엔 2018. 5. 8.
반응형

안녕하세요.

오랜만에 Project Euler 문제 풀이를 하게 되었습니다.

오늘은 아래와 같은 문제로 Python 코딩을 진행해보려고 합니다. 사실 쉽다면 쉽고, 어렵다면 어려운 문제 중에 하나이네요.



여기서 3자리 수의 곱을 통해서 만들 수 있는 가장 큰 수를 찾아야하는 문제인데요. 일단 최대,최소를 생각해보셔야 합니다. 먼저 3자리 수에서 가장 작은 숫자는 100입니다. 둘을 곱했을때 나올 수 있는 수는 10000이며, 반대로 가장 큰 숫자는 999의 제곱입니다. 999의 제곱은 998001로 5자리부터 6자리까지 결과로 발생하게 됩니다. 이런 결과를 가지고 올 수 있도록 저는 결과를 텍스트로 인식을 하여 각 자리의 수를 매칭시키는 것을 통해서 결과를 도출 하는 아래와 같은 코드로 수행을 했습니다.


aa=list()

for i in range(100, 1000,1) :

for j in range(100, 1000) :

result = i*j

txt=str(result)

if len(txt) ==6 :

a,b,c,d,e,f=txt[0],txt[1],txt[2],txt[3],txt[4],txt[5]

if a==f and b==e and c==d :

aa.append(result)


print(max(aa))


위의 코드는 aa라는 list 변수를 하나 만들어두고, 100~999까지 두 변수들이 곱해지는 과정을 통해서 result라는 결과를 발생시킵니다. 또한, 이것은 각 자리수에 따라 a,b,c,d,e,f라는 변수로 따로 받으며, a=f, b=e, c=d가 일치할때, 리스트 함수에 추가해주게 됩니다. 또한, 리스트에 추가된 변수 중에 가장 큰 변수를 찾아 Print 하게 하는 방식을 통해서 구성했습니다.


사실 그렇게 어렵지만은 않은 것이지만, 얼마나 빨리 연산을 하는지에 대해서 경쟁하는 구도이기에 최적화가 필수적으로 필요한 부분 중에 하나가 될 것 같습니다.


다른 방식으로 빠른 연산 속도를 자랑하신다면, 아래 댓글 부탁드립니다.

반응형

댓글