Q. 로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.
if
사용해서 필터링def roman_to_num(s):
# 여기에 코드를 작성해주세요.
I = s.count('I') * 1
V = s.count('V')* 5
X = s.count('X') * 10
L = s.count('L') * 50
C = s.count('C') * 100
D = s.count('D') * 500
M = s.count('M') * 1000
result = I + V + X + L + C + D + M
if 'IV' in s or 'IX' in s:
result -= 2
if 'XL' in s or 'XC' in s:
result -= 20
if 'CD' in s or 'CM' in s:
result -= 200
return result
원래 규칙대로 계산한 값과 예외상황일 때 계산값의 차를 반환할 변수에 적용한다.
def roman_to_num2(s):
# 여기에 코드를 작성해주세요.
dict={'I' : 1,
'V' : 5,
'X' : 10,
'L' : 50,
'C' : 100,
'D' : 500,
'M' : 1000}
a = 0
for i in s :
a += 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
딕셔너리에 로마자와 그에 지정된 숫자를 저장한다.
for
을 사용해서 a
에 반환할 값을 누적하여 저장한다.
코드 길이는 비슷하지만 '딕셔너리'와 'for
' 을 사용하여 중복된 코드를 제거하고
이후에 로마자가 추가됐을 때 수정할 부분이 더 적게된다.