# -*- coding: utf-8 -*- # 문제 : # http://projecteuler.net/index.php?section=problems&id=8 # 첫자리 숫자가 있다. 연속되는 5개의 곱이 가장 큰 값을 찾아보자 # # 접근 : # 두 가지 함수가 필요하다고 판단 # 1) 주어진 인덱스에서 연속 되는 5개의 값을 찾는 함수 # 2) 1에서 만들어진 5개의 값을 곱한 결과는 찾는 함수 # # 해결 : # 0부터 1000 - 4 까지 돌면서 연속된 5개의 숫자를 곱하며, # 최대값을 찾는다. # # s_bignum = ''' 73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450''' def process(): max_idx = 0 for cnt in range(0, len(s_bignum) - 4): # 연속되는 5자리 숫자므로 인덱스가 초과하지 않게 제한. if product(max_idx) < product(cnt) : max_idx = cnt; print "%dth number : %d" % ( max_idx, product(max_idx) ) # def product(idx) # 연속된 5개의 숫자를 구한다. def product(idx): l = [] cnt = 0 while cnt < 5: if s_bignum[idx ].isdigit(): # 문자열이 숫자인지 판단 함수 l.append(s_bignum[idx ]) cnt = cnt + 1 idx = idx + 1 return product_(l) # def product_(lst) # 연속된 5개의 숫자의 곱을 구한다. def product_(lst): if len(lst) < 5: return 0; # 문자 형식으로 들어있는 리스트 안의 5개의 값을 숫자로 변환(map) # 5개의 숫자를 모두 곱함(reduce) return reduce(lambda x, y: x * y, map(lambda x: int(x), lst)) def main(): process() if __name__ == '__main__': print '[START] ----------------------------' main() print '[END] ----------------------------'결과
[START] ---------------------------- 372th number : 40824 [END] ----------------------------
반응형
'Develop' 카테고리의 다른 글
Django 개발용 서버에서 media 파일 서비스 하기 (0) | 2012.03.07 |
---|---|
Apache2 에서 root document 를 다른 경로로 설정. (0) | 2011.09.21 |
[Problem 6] 합의 제곱과 제곱의 합 차이 (0) | 2011.01.08 |
[Problem 49]네자리 수의 등차소수 찾기 (2) | 2008.02.17 |
.htaccess 설정파일. (0) | 2008.01.27 |