로마 숫자를 정수로 바꾸기 [코딩테스트 Python]

시나리오

요즘 언휴는 로마 숫자에 빠져있어요.

아라비아 숫자보다 뭔가 멋있다는 생각이 들어 일상에서 간단한 수는 로마 숫자로 표기하고 있어요.

하지만 로마 숫자로 표기하면 매 번 수를 계산하는데 시간이 걸리네요.

언휴는 빠르게 아라비아 수로 변환할 필요성을 느꼈어요.

여러분은 언휴를 도와 로마 숫자로 표기한 내용을 아라비아 수로 변환하는 코드를 작성하세요.

로마숫자
I1
V5
X10
L50
C100
D500
M1000

로마 숫자는 기호를 합산하여 수를 계산합니다.

예를 들어 III는 3(1+1+1)이며 LV는 55(50+5)입니다.

만약 작은 수가 큰 수보다 앞에 오면 큰 수에서 작은 수를 빼야 합니다.

에를 들어 IV는 4(5-1)인 것이죠.

문제

난이도: 2 (easy) [1:very easy, 2:easy, 3:middle, 4: difficult, 5: very difficult]

입력: “MCMXCIV”

출력: 1994

설명: 1000(M)-100(C)+1000(M)-10(X)+100(C)-1(I)+5(V)=1994

코드

def  Roman2Number(roman):
    #to do
print("%d"%Roman2Number("MCMXCIV"))

솔루션

def  Roman2Number(roman):
    rdict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    nv = roman[0]
    number=rdict[nv]
    for i in range(1,len(roman)):
        bv = nv
        nv = roman[i]
        if(rdict[bv]>=rdict[nv]):
            number += rdict[nv]
        else:
            number += rdict[nv] - 2*rdict[bv]
    return number
print("%d"%Roman2Number("MCMXCIV"))