Sunday, April 19, 2015

Project Euler #17 - 숫자 읽기

1000까지의 숫자를 영어로 쓸 때 필요한 알파벳의 수는?

성실과 근면을 요구하는 문제.. forty인지 fourty인지 헷갈리는 ESL 입장에선 약간 짜증나는 문제.

d1 = ['one','two','three','four','five','six','seven','eight','nine']
d2 = ['ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen']
d3 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
d4 = ['hundred','and','thousand']

l1 = [len(e) for e in d1]
l2 = [len(e) for e in d2]
l3 = [len(e) for e in d3]
l4 = [len(e) for e in d4]
# 1~99
s1 = sum(l1)*9 + sum(l2) + sum(l3)*10

# 1~99 101~199 ... 901~999
s2 = s1*10 + sum(l1)*99 + sum(l4[:2])*99*9

# 1~1000
s3 = s2 + sum(l1) +  l4[0]*9 + l1[0] + l4[2]
print s3


글타래를 읽다 보니.. 요런 스타일의 코드가 있다.
def read(n):
    ...
    return ...

sm = 0
for i in range(1,1001):
    sm += len(read(n))

print sm

귀찮은 정도는 똑같지만, 답이 틀렸을 때 틀린 부분을 찾기가 좀 더 쉬울 것 같다.

No comments: