로마자에서 숫자로 바꾸기 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
Need to know
- 하나하나를 더하면 되는거야 하나씩 오케이 ?
문자로 짜봐
- 딕셔너리로 만들어서 key값의 인덱스를 뽑아서 더할꺼야
- 먼저
roman을 변수로 딕셔너리로 만들어주고
2.while문을 돌려서 인덱스 구하기위해n=0으로 하나 만들어주자- 그걸 통해서
key값의 인덱스로 문자 하나씩 뽑아서 리스트에 추가 하기위해, 빈 리스트 하나 만들어줘result=[]- 3가지 경우의 수가 나올꺼야
- 아래에서 설명 !
- 글고 리스트에 추가한다음 그리고 나서 다 더할꺼얌
정답
def roman_to_num(s): roman = { 'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000, } ` n = 0 result = [] while n < len(s): # len(s)보다 작을때 if n == len(s)-1: # len(s)-1 과 n이 같으면 추가(마지막이 같으면 뒤에꺼 비교할 필요가 없기때문에 그냥 추가) result.append(roman[s[n]]) n += 1 elif roman[s[n+1]] > roman[s[n]]: # 뒤에 숫자가 앞의 숫자보다 크면 (이경우는 4,9 or 40,90 이런거 만들때만 있으니까 빼주면 됌) sub = roman[s[n]] * -1 result.append(sub) n += 1 else: # 보통의 경우는 바로 추가해주 고 result.append(roman[s[n]]) n += 1 ` return sum(result) # 더한 값 고고
참고
sum(result): 리스트 더하기dictionary에 key값 구하는것 / 다른 문자열의 인덱스를 통해 문자 뽑아낸다음while 문