반응형
연속된 세 개의 자리수의 합이 9를 넘지 않는 20자리수의 갯수를 구하라. ( http://projecteuler.net/index.php?section=problems&id=164 )
def get_count(n1, n2, remain):
#print " "*(20 - remain), n1, n2, remain
if cache.has_key((n1, n2, remain)):
return cache[(n1, n2, remain)]
count = 0
sum = n1 + n2
if remain == 1:
cache[(n1, n2, remain)] = 10 - sum
return 10 - sum
for n3 in range(10 - sum):
count += get_count(n2, n3, remain - 1)
cache[(n1, n2, remain)] = count
return count
cnt = 0
cache = {} # this resolves the time issue.
for n1 in range(1, 10):
for n2 in range(10 - n1):
cnt += get_count(n1, n2, 18)
#print cnt
print cnt
728x90
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[Euler Project 090] (0) | 2012.05.29 |
---|---|
[Euler Project 091] 직각삼각형 갯수 구하기 (2) (0) | 2012.05.25 |
생성함수 (0) | 2009.08.14 |
[Euler Project 078] 분할함수 (Partition Function) (0) | 2009.08.03 |
[Euler Project 077] 소수의 합으로 표현하는 가짓수 (0) | 2009.08.01 |