[Code Kata] 로마자 숫자로 바꾸기

박광수·2022년 3월 27일
0

Q.

로마자에서 숫자로 바꾸기 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):
  Rev_dic = {'CM' : 900, 'CD' : 400, 
  'XC' : 90, 'XL' : 40, 'IX' : 9, 'IV' : 4}
  Dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}

  ans = 0
  
  for rev in Rev_dic:
    if rev in s:
      ans+=Rev_dic[rev]
      s=s.replace(rev,"")
  
  for letters in s:
    ans+=Dic[letters]

  return ans
  • 4, 9, 40, 90, ... 등의 숫자는 IV 처럼 더 작은 수를 뜻하는 문자 I가 더 큰 수를 뜻하는 문자 V앞에 나오게 된다. 따라서 역순으로 배열된 문자들만 따로 값을 주고 나머지 문자들은 문자 그대로 값을 부여하여 더하면 된다.

  • 물론 INPUT값의 범위가 더 넓어졌을 때 Rev_dic 에 계속 값들을 입력해줘야하기 때문에 확장성이 뛰어난 코드는 아니라고 생각한다.

  • For문을 이용하여 앞에 나온 문자의 값이 뒤의 문자의 값보다 작을때 빼주는 로직으로 작성하면 확장성을 더욱 고려한 코드를 구현 가능하다.

profile
박광수입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN