1 ~ 3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환하기
로마 숫자를 숫자로 표기하면 아래와 같다.
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 된다.
III = 3
XVI = 12
XXVII = 27
그런데 4를 표현할 때는 IIII가 아니라 IV이다.
뒤의 숫자에서 앞의 숫자를 빼주면 된다.
따라서 9는 IX이다.
I는 V와 X앞에 와서 4, 9
X는 L, C 앞에 와서 40, 90
C는 D,M 앞에 와서 400, 900
roman = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
for문 안에서 다음(뒤)에 위치한 로마숫자와 비교할 것이기 때문에 마지막 로마숫자를 제외한 끝에서 두번째 위치한 로마숫자까지로 범위를 정한다.
for i in range(len(s)-1):
뒤(다음)에 위치한 로마숫자의 숫자가 더 작을 경우 정상적으로 결과값에 더해지지만, 뒤에 위치한 로마숫자의 숫자가 더 클 경우에는( IV = 4, IX = 9 등등) 음수의 형태로 더해지는 것으로 여기고 결과값에서 빼준다.
if roman[s[i]] < roman[s[i+1]]:
result -= roman[s[i]]
else:
result += roman[s[i]]
result += roman[s[-1]]
return result
def roman_to_num(s):
roman = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
result = 0
for i in range(len(s)-1):
if roman[s[i]] < roman[s[i+1]]:
result -= roman[s[i]]
else:
result += roman[s[i]]
result += roman[s[-1]]
return result
🥦 문제를 이해하기 위해 필요했던 부분
만약 99의 숫자를 반환하고 싶으면 로마숫자 'IC'가 주어지면 안될까??
안됨. 99의 숫자를 반환하고 싶다면 90의 숫자와 9의 숫자를 만든다는 생각으로
90의 숫자를 만드는 'XC'의 조합과 9의 숫자를 반환할 수 있는 'IX'의 조합을 더한 'XCIX'로 만들어진다.