[wecode/codekata]Day 6

Jimin_Note·2022년 6월 13일
0

⌨️wecode/code_kata

목록 보기
6/13
post-thumbnail

📍문제

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

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

로마자를 숫자로 읽는 방법 : 로마자를 왼쪽부터 차례대로 덧셈

III = 3
XII = 12
XXVII = 27

예외)
4를 표현할 때는 IIII가 아니라 IV
9는 IX
-> 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.

I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900

📍내 코드(틀림)

<주의해야될 부분>
IV : I+V = 6 , 사실은 V-I = 4
IX : I+X + 11 , 사실은 X-I = 9
XL : X+L = 60 , 사실은 L-X =40
XC : X+C = 110 , 사실은 C-X= 90
CD : C+D = 600 , 사실은 D-C=400
CM : C+M=1100 , 사실은 M-C=900

def roman_to_num(s):
  
 #roman_dict={1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M'}
 roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
 a=[]
 for i in s:
     a.append(roman_dict[i]) #로마자에 해당하는 value 를 모두 리스트 a에 넣기
 if str(sum(a)).startswith('6' or'11') and str(a[0]).startswith('1') :
    return a[1]-a[0]
     
 else: 
   return sum(a)

위 처럼하면 로마자 처음에 나오는 4, 9는 해결이 되는데 중간에 있는 4, 9는 6,11로 그냥 더해진다..

📍수정한 코드

def roman_to_num(s):

 roman_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

 a = 0
 for i in s:
  a += roman_dict[i]
 if 'IV' in s or 'IX' in s:
  a -= 2
 if 'XL' in s or 'XC' in s:
  a -= 20
 if 'CD' in s or 'CM' in s:
  a -= 200
 return a
profile
Hello. I'm jimin:)

0개의 댓글