Problem link
https://leetcode.com/problems/integer-to-english-words
Problem Summary
숫자를 영어로 변환하는 문제.
Solution
문제는 매우 쉽지만 아주 지저분하다.
1000씩 끊고 10씩 끊는 등 숫자를 잘게 나누면 그나마 덜 지저분하게 짤 수 있다.
오타 조심..! (Ninety 잘못 쳐서 1번 틀림..)
Source Code
class Solution:
def numberToWords(self, num: int) -> str:
def toWordBelow10(num):
return [
"",
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
][num]
def toWordBelow20(num):
if num < 10:
return toWordBelow10(num)
return [
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
"Seventeen",
"Eighteen",
"Nineteen",
][num - 10]
def toWordBelow100(num):
if num < 20:
return toWordBelow20(num)
ret = []
if num // 10 > 0:
ret.append(
[
"",
"",
"Twenty",
"Thirty",
"Forty",
"Fifty",
"Sixty",
"Seventy",
"Eighty",
"Ninety",
][num // 10]
)
num %= 10
ret.append(toWordBelow10(num % 10))
return " ".join(ret).strip()
def toWordBelow1000(num):
ret = []
if num // 100 > 0:
ret.append(toWordBelow10(num // 100))
ret.append("Hundred")
num %= 100
ret.append(toWordBelow100(num))
return " ".join(ret).strip()
ret = []
if num // 10**9 > 0:
ret.append(toWordBelow1000(num // 10**9))
ret.append("Billion")
num %= 10**9
if num // 10**6 > 0:
ret.append(toWordBelow1000(num // 10**6))
ret.append("Million")
num %= 10**6
if num // 10**3 > 0:
ret.append(toWordBelow1000(num // 10**3))
ret.append("Thousand")
num %= 10**3
ret.append(toWordBelow1000(num))
ans = " ".join(ret).strip()
if ans == "":
ans = "Zero"
return ans