Code Kata 란, 2인 1조의 구성으로 서로 협력하여 하루에 한 문제씩 해결하는 과제입니다.
로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
로마 숫자를 숫자로 표기하면 다음과 같습니다.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. III = 3 XII = 12 XXVII = 27입니다.
그런데 4를 표현할 때는 IIII가 아니라 IV 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.
I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900
def roman_to_num(s):
romalist = list(s)
numberlist = []
roma_number = {
'I':'1', 'V':'5', 'X':'10', 'L':'50', 'C':'100', 'D':'500', 'M':'1000'
}
for i in romalist:
i_int = roma_number.get(i)
numberlist.append(i_int)
indexnumber = len(numberlist)
resultlist = []
for i in range(1, indexnumber) :
a = int(numberlist[i-1])
b = int(numberlist[i])
if a < b :
c = -a
resultlist.append(c)
if a >= b :
resultlist.append(a)
aa = int(numberlist[indexnumber-1])
resultlist.append(aa)
res = sum(resultlist)
return res
1시간 이내에 해결 실패. 사실 아직도 잘 이해 안된다.
# dict2에 매치되는애들을 스트링에서 찾아서 숫자로 바꾸고 스트링에서 그 문자를 빼버린뒤에
남은 숫자 더하는겁니다.
def roman_to_num(s):
dict1={'I':1 ,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,}
dict2={'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900 }
a = 0
for key,value in dict2.items():
if key in s:
a += value
s = s.replace(key,'')
for i in s:
a += dict1[i]
#dict3을 저렇게 만들어서 특수경우를 걍 다 풀어버린겁니다.
def roman_to_num(s):
dict1={'I':1 ,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,}
dict3={'IV':'IIII','IX':'VIIII','XL':'XXXX','XC':'LXXXX','CD':'CCCC','CM':'DCCCC' }
a = 0
for key, value in dict3.items():
s = s.replace(key,value)
for i in s:
if i in s:
a += dict1[i]
def roman_to_num(s):
# 여기에 코드를 작성해주세요.
roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
num = 0
for i in range(len(s)):
num += roman_dict[s[i]]
print(num)
if 'IV' in s or 'IX' in s:
num -= 2
if 'XL' in s or 'XC' in s:
num -= 20
if 'CD' in s or 'CM' in s:
num -= 200
return num
만약 s=IV 라면
roman_dict[IV[0]]
=> I => 1
roman_dict[IV[1]]
=> V => 1+5 = 6
if 'IV' in s
에 해당, num -= 2
최종 값 6 - 2 = 4