통계, IT, AI

17. Number letter counts 본문

IT/PROJECT_EULER

17. Number letter counts

Harold_Finch 2017. 1. 12. 23:05

1. 개요

문제는 이곳에서 확인할 수 있다. 1부터 1000까지 영어로 세고 각 알파벳의 수를 더하면 된다. 몇가지 예외만 고려하면 쉽게 해결할 수 있다.

2. Ver 1.0

# -*- coding: utf-8 -*-
data = dict()
data[0] = ""
data[1] = "ONE"
data[2] = "TWO"
data[3] = "THREE"
data[4] = "FOUR"
data[5] = "FIVE"
data[6] = "SIX"
data[7] = "SEVEN"
data[8] = "EIGHT"
data[9] = "NINE"
data[10] = "TEN"
data[11] = "ELEVEN"
data[12] = "TWELVE"
data[13] = "THIRTEEN"
data[14] = "FOURTEEN"
data[15] = "FIFTEEN"
data[16] = "SIXTEEN"
data[17] = "SEVENTEEN"
data[18] = "EIGHTEEN"
data[19] = "NINETEEN"
data[20] = "TWENTY"
data[30] = "THIRTY"
data[40] = "FOURTY"
data[50] = "FIFTY"
data[60] = "SIXTY"
data[70] = "SEVENTY"
data[80] = "EIGHTY"
data[90] = "NINETY"
data[100] = "HUNDRED"
cnt = 0

for n in range(1,1000):
    digit_1, digit_2 = divmod(n, 100)
    digit_2, digit_3 = divmod(digit_2, 10)

    str_1 = ""
    str_2 = ""

    # 100의 자리 처리
    if digit_1 != 0:
        str_1 = data[digit_1] + data[100]

    # 10의 자리 및 1의 자리 처리
    if digit_2 == 1:
        str_2 = data[digit_2*10+digit_3]
    else:
        str_2 = data[digit_2*10] + data[digit_3]

    # ex) 101 -> ONE HUNDRED AND ONE
    if digit_1 != 0 and not (digit_2 == 0 and digit_3 == 0):
        str_1 += "AND"

    cnt += len(str_1 + str_2)

cnt += len("ONETHOUSAND")
print(cnt)

답은 21124이다.

'IT > PROJECT_EULER' 카테고리의 다른 글

19. Counting Sundays, 20. Factorial digit sum  (0) 2017.01.18
18. Maximum path sum I  (0) 2017.01.15
15. Lattice paths, 16. Power digit sum  (0) 2017.01.12
14. Longest Collatz sequence  (0) 2017.01.11
13. Large sum  (0) 2017.01.08
Comments