안녕하세요.
오랜만에 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 하게 하는 방식을 통해서 구성했습니다.
사실 그렇게 어렵지만은 않은 것이지만, 얼마나 빨리 연산을 하는지에 대해서 경쟁하는 구도이기에 최적화가 필수적으로 필요한 부분 중에 하나가 될 것 같습니다.
다른 방식으로 빠른 연산 속도를 자랑하신다면, 아래 댓글 부탁드립니다.
'Program > Python(Project Euler)' 카테고리의 다른 글
Python :: Project Euler 6번 문제 풀이 (0) | 2018.05.10 |
---|---|
Python :: Project Euler 5 문제 풀이 (0) | 2018.05.09 |
Python :: Project Euler 3번 문제 (코딩 문제 풀이) (0) | 2018.03.12 |
프로젝트 오일러(Project Euler #2) (0) | 2017.09.28 |
코딩 문제 사이트 (Project Euler) (2) | 2017.08.27 |
댓글