Last active
August 26, 2019 14:45
-
-
Save pegasuskim/aede36d13598b07d47c9d9d54c13235f to your computer and use it in GitHub Desktop.
CodingTest01
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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