1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는?

사이트 이름 - 문제 17번

1부터 5까지의 수를 영어로 쓰면 one, two, three, four, five 이고,

각 단어의 길이를 더하면 3 + 3 + 5 + 4 + 4 = 19 이므로 사용된 글자는 모두 19개입니다.

 

1부터 1,000까지 영어로 썼을 때는 모두 몇 개의 글자를 사용해야 할까요?

 

참고:

빈 칸이나 하이픈('-')은 셈에서 제외하며, 단어 사이의 and 는 셈에 넣습니다.

예를 들어 342를 영어로 쓰면 three hundred and forty-two 가 되어서 23 글자, 115 = one hundred and fifteen 의 경우에는 20 글자가 됩니다.

해결 방법

먼저 영어 쓰는 법 부터;;; 알아야 겠다.ㅎㅎ;;100까지는 기억나는데 그 이후론 사용을 안하니 모르겠다.ㅠㅠ (일단 공부했고, 이건 따로 정리를 안해야겠다..길어서 지금은 시간이 없으므로)

천 까지 쓸 영어에 필요한 단어들을 정리

아주 그냥 무식하게 풀었다.ㅎㅎ;;;;

1,000개 짜리 빈 리스트를 만들고, 중복이 되지 않는 수들만 미리 배열에 넣어둔다.

그 이후 21에서 99까지 for 문으로 숫자에 해당하는 글자를 만들어 해당하는 리스트번호에 넣는다.

101번 째 부터 999번째 까지도 동일하게 처리한다.

그러면 1,000 까지 숫자에 해당하는 문자가 찍힌다.

마지막으로 문자를 카운트 하는데 None이나 공백, - 등의 문자는 replace 함수로 처리하고 순수 문자의 개수만 카운트하면 답이 나온다.

numbers_string = [None] * 1001
numbers_string[1] = 'one'
numbers_string[2] = 'two'
numbers_string[3] = 'three'
numbers_string[4] = 'four'
numbers_string[5] = 'five'
numbers_string[6] = 'six'
numbers_string[7] = 'seven'
numbers_string[8] = 'eight'
numbers_string[9] = 'nine'
numbers_string[10] = 'ten'
numbers_string[11] = 'eleven'
numbers_string[12] = 'twelve'
numbers_string[13] = 'thirteen'
numbers_string[14] = 'fourteen'
numbers_string[15] = 'fifteen'
numbers_string[16] = 'sixteen'
numbers_string[17] = 'seventeen'
numbers_string[18] = 'eighteen'
numbers_string[19] = 'nineteen'
numbers_string[20] = 'twenty'
numbers_string[30] = 'thirty'
numbers_string[40] = 'forty'
numbers_string[50] = 'fifty'
numbers_string[60] = 'sixty'
numbers_string[70] = 'seventy'
numbers_string[80] = 'eighty'
numbers_string[90] = 'ninety'
numbers_string[100] = 'one hundred'
numbers_string[200] = 'two hundred'
numbers_string[300] = 'three hundred'
numbers_string[400] = 'four hundred'
numbers_string[500] = 'five hundred'
numbers_string[600] = 'six hundred'
numbers_string[700] = 'seven hundred'
numbers_string[800] = 'eight hundred'
numbers_string[900] = 'nine hundred'
numbers_string[1000] = 'one thousand'

for i in range(20, 100, 10):
    for j in range(1, 10):
        idx = i + j
        numbers_string[idx] = numbers_string[i] + " " + numbers_string[j]


for i in range(1, 10):
    for j in range(1, 100):
        idx = (i * 100) + j
        numbers_string[idx] = numbers_string[i] + " hundred and " + numbers_string[j]


letters_cnt = 0
for num in numbers_string:
    if num is None:
        continue
    
    letters = num.replace(" ", "")
    letters = letters.replace("-", "")
    letters_cnt += len(letters)
    
print(letters_cnt) # 21124
print(numbers_string)

진심 겁나 무식하게 풀었네..ㅠㅠ

아래 다른이의 해결 방법처럼도 생각 했었는데...왜 이렇게 어렵게 풀었을려나...

어쨌든 더 열심히 공부해야겠다.

다른이의 해결 방법

처음부터 숫자로만 처리하는 방법

def num1(x):
    if x>=0 and x<=10:
        n=[0,3,3,5,4,4,3,5,5,4,3]
        return n[x]
    if x>10 and x<20:
        n=[6,6,8,8,7,7,9,8,8]
        return n[x-11]

def num2(x):
    if x<20:
        return num1(x)
    if x>=20 and x<100:
        n=[6,6,5,5,5,7,6,6]
        return n[(x//10)-2]+num1(x%10)

def num3(x):
    if x<100:
        return num2(x)
    if x>=100:
        a=x//100
        b=x%100
        if b==0:
            return num1(a)+7
        else:
            return num1(a)+num2(b)+10
S=11
for i in range(1,1000):
    S+=num3(i) 

print(S)

내가 푼 방법과 비슷하지만 더 간단한 방법

sum=0
num = ['one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen']
tens = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']

for ten in tens:
    num.append(ten)
    for item in range(0,9):
        num.append(str(ten + num[item]))

for hun in range(0,9):
    num.append(str(num[hun] + 'hundred'))
    for hundigit in range(0,99):
        num.append(str(num[hun]+'hundredand'+num[hundigit]))

num.append('onethousand')
for n in num:
    sum+=len(n)

print(sum)

 

+ Recent posts