Algorithm/ProjectEuler

[ProjectEuler] 프로젝트 오일러 Problem 17

HAS3ONG 2019. 7. 10. 15:05
numbers = {
    1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten',
    11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen',
    20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety',
    100: 'hundred', 1000: 'thousand'
}

def func(n):
    if n < 100:
        if n not in numbers:
            numbers[n] = numbers[n - n % 10] + numbers[n % 10]
        return numbers[n]

    if n < 1000:
        if n % 100 == 0:
            return numbers[n // 100] + numbers[100]
        return numbers[n // 100] + numbers[100] + 'and' + numbers[n % 100]

    return 'one' + numbers[1000]


ret = 0
for i in range(1, 1001):
    value = func(i)
    ret += len(value)

print(ret)

출처

http://euler.synap.co.kr/prob_detail.php?id=17