로마자에서 숫자로 바꾸기 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):
rom = {"I": 1, "V": 5, "X": 10, "L" : 50, "C": 100, "D": 500, "M": 1000}
total = 0
if len(s) > 0:
for i in range(0, len(s)-1): # 0에서 총길이의 -1 (range 0부터 카운트하기 때문에 예로 Django 0,1,2,3,4,5 = 총 길이는 6)
if rom[s[i]] < rom[s[i+1]]: # I < X 뒷단어가 앞단어보다 높을 때는 빼줘야 한다.
total -= rom[s[i]]
else:
total += rom[s[i]] # I > V 뒷단어가 앞단어보다 작을 때 더한다.
return total + rom[s[-1]] # 마지막 값은 비교안되기 때문에 더해준다. 그리고 문자가 2개 뿐이고 I < X 처럼일 경우에 -1에서 +10을 해줘야 9가 된다.
else:
total = rom[s[0]] # 만약 문자 하나만 나온다면 그 값이 total 값이다.
return total