Code Kata #6

tycode·2021년 6월 30일
0

Code Kata

목록 보기
6/8

문제

로마자에서 숫자로 바꾸기 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):

  rom = {"I": 1, "V": 5, "X": 10, "L" : 50, "C": 100, "D": 500, "M": 1000}
  total = 0

  if len(s) > 0:
    for i in range(0, len(s)-1):      # 0에서 총길이의 -1 (range 0부터 카운트하기 때문에 예로 Django 0,1,2,3,4,5 = 총 길이는 6)
      if rom[s[i]] < rom[s[i+1]]:     # I < X 뒷단어가 앞단어보다 높을 때는 빼줘야 한다.
        total -= rom[s[i]]
      else:
        total += rom[s[i]]	      # I > V 뒷단어가 앞단어보다 작을 때 더한다.
        
    return total + rom[s[-1]]  	      # 마지막 값은 비교안되기 때문에 더해준다. 그리고 문자가 2개 뿐이고 I < X 처럼일 경우에 -1에서 +10을 해줘야 9가 된다.

  else:
    total = rom[s[0]]		      # 만약 문자 하나만 나온다면 그 값이 total 값이다.

    return total

0개의 댓글