로마자에서 숫자로 바꾸기 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}
int = 0
for i in range(len(s)):
if i > 0 and rom[s[i]] > rom[s[i - 1]]:
int += rom[s[i]] - 2 * rom[s[i - 1]]
else:
int += rom[s[i]]
return int
먼저 내가 풀지는 못했고 다른 블로그의 풀이임을 밝힌다.
나의 생각은 먼저 딕셔너리에 값을 넣어 두고 for문을 이용해서 접근하려고 했지만 구현하지 못했다.
위에 풀이는 로직상 현재 값에서 다음 값보다 작으면 그 경우 값을 빼주고 그 값을 int에 계속 더해주고 그렇지 않다면 해당 리스트의 값을 int에 더해 준다.
로직은 그렇게 되어 있지만 사실 아직 감은 안오기 때문에 많이 연습해봐야 할거 같다