📍문제
로마자에서 숫자로 바꾸기 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
-> 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.
I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900
<주의해야될 부분>
IV : I+V = 6 , 사실은 V-I = 4
IX : I+X + 11 , 사실은 X-I = 9
XL : X+L = 60 , 사실은 L-X =40
XC : X+C = 110 , 사실은 C-X= 90
CD : C+D = 600 , 사실은 D-C=400
CM : C+M=1100 , 사실은 M-C=900
def roman_to_num(s):
#roman_dict={1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M'}
roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
a=[]
for i in s:
a.append(roman_dict[i]) #로마자에 해당하는 value 를 모두 리스트 a에 넣기
if str(sum(a)).startswith('6' or'11') and str(a[0]).startswith('1') :
return a[1]-a[0]
else:
return sum(a)
위 처럼하면 로마자 처음에 나오는 4, 9는 해결이 되는데 중간에 있는 4, 9는 6,11로 그냥 더해진다..
def roman_to_num(s):
roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
a = 0
for i in s:
a += roman_dict[i]
if 'IV' in s or 'IX' in s:
a -= 2
if 'XL' in s or 'XC' in s:
a -= 20
if 'CD' in s or 'CM' in s:
a -= 200
return a