Code Kata 2-1

김경천·2021년 5월 31일
0
post-thumbnail

문제

로마자에서 숫자로 바꾸기 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요.

로마 숫자를 숫자로 표기하면 다음과 같습니다.

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다.
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):
  roma= {'I': 1, 'V':5, 'X': 10,'L':50, 'C':100,'D':500, 'M':1000}
  total = 0
  for i in range(len(s)):
    if total >0 and roma[s[i]] >roma[s[i-1]]:
      total += roma[s[i]] -2*roma[s[i-1]]
    else:
      total += roma[s[i]]

  return total
print(roman_to_num('XLD'))

로마문자와 그에 대응하는 숫자를 딕셔너리에저장했다.
로마문자의 길이를 반복문을통해 하나씩 돌게하였다.
4같은경우 앞에 문자가 뒤문자보다 작기에 앞에문자에서 뒤문자를 빼줘야한다.
IV -> 5-1 =4
아닌경우 그냥 더해주면된다.
XXVII ->10+10+5+1+1 = 27

내가한 풀이는 하나씩 돌기때문에 현재 문자가 전문자보다 클경우
현재문자의 숫자값에서 -2*(이전문자 숫자값)를 한다음에 total 변수에 저장했다.
아닌경우(앞에문자의 숫자값이 더큰경우)
그냥 total변수에 합쳤다.
예)
XLD를해보면 10+30+400 =440나온다.
CDXL 100+300+10+30 = 440
로마자는 하나의숫자의 두가지 경우가 나오나보다.ㅎㅎ

로마숫자변환기

profile
화이팅

0개의 댓글