Skip to content

Instantly share code, notes, and snippets.

@pegasuskim
Last active August 26, 2019 14:45
Show Gist options
  • Save pegasuskim/aede36d13598b07d47c9d9d54c13235f to your computer and use it in GitHub Desktop.
Save pegasuskim/aede36d13598b07d47c9d9d54c13235f to your computer and use it in GitHub Desktop.
CodingTest01
d1 = {'만':10000, '억':100000000, '조':1000000000000, '경':10000000000000000}
d2 = {'십':10, '백':100, '천':1000}
d3 = {'일':1, '이':2, '삼':3, '사':4, '오':5, '육':6, '칠':7, '팔':8, '구':9}
# 'xxxx경', 'xxxx조', 'xxxx억', 'xxxx만', 'xxxx' 순서대로 리턴
def cut1(krw):
for u in '경조억만':
if u in krw:
if krw[0] == u:
raise Exception
i = krw.index(u)
yield krw[:i], d1[u]
krw = krw[i+1:]
if krw:
yield krw, 1
# 'x천', 'x백', 'x십', 'x' 순서
def cut2(krw):
for u in '천백십':
if u in krw:
yield d3[krw[0]] * d2[krw[1]]
krw = krw[2:]
if krw:
yield d3[krw]
def remove_exceptions(krw):
# 십, 백, 천, 만 -> 생략된 '일' 삽입
ret = ''
for i in range(len(krw)):
if krw[i] in '십백천' and (i == 0 or krw[i-1] not in '일이삼사오육칠팔구') or \
krw[i] == '만' and (i == 0 or krw[i-1] in '경조억'):
ret += '일'
ret += krw[i]
if len(ret) >= 3 and ret[-3] == '억' and ret[-1] == '천':
ret += '만'
return ret
def ktod(krw):
if krw == '영':
return 0
krw = remove_exceptions(krw)
num = 0
for slice, base in cut1(krw):
for n in cut2(slice):
num += n * base
return num
# Test 코드
data = [
['오백삼십조칠천팔백구십만천오백삼십구', '삼조사천이만삼천구'],
['구백육십조칠천억팔천이백삼십이만칠천일', '사십삼조오천이백억육천구백삼십만일'],
['이천구백육십사조삼천오백칠십이만삼천구백구십', '삼천사백오십조일억이천일만육백사십삼'],
['사십오억삼천육십만오백구십', '칠십억천이백삼십오만칠천구십이'],
['천백십일', '구천오백구십구'],
['오억사천', '백십일'],
['만오천사백삼십', '십구만삼천오백'],
['일조', '삼'],
['일억', '만'],
]
for pair in data:
a,b = pair
try:
aa = ktod(a)
except:
print('aa False')
try:
bb = ktod(b)
except:
print('BB False')
print("aa + bb:" , aa + bb)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment