Code Kata | day6 roman_to_num

juri·2021년 7월 26일
0

Code Kata

목록 보기
6/15
post-thumbnail

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

☑️ 0차

  1. 문자에 값 지정
  2. 예외상황을 if 사용해서 필터링

☑️ 1차

def roman_to_num(s):
  # 여기에 코드를 작성해주세요.
    I = s.count('I') * 1
    V = s.count('V')* 5
    X = s.count('X') * 10
    L = s.count('L') * 50
    C = s.count('C') * 100
    D = s.count('D') * 500
    M = s.count('M') * 1000
    
    result = I + V + X + L + C + D + M

    if 'IV' in s or 'IX' in s:
      result -= 2
    if 'XL' in s or 'XC' in s:
      result -= 20
    if 'CD' in s or 'CM' in s:
      result -= 200
    return result

원래 규칙대로 계산한 값과 예외상황일 때 계산값의 차를 반환할 변수에 적용한다.

☑️ 2차

def roman_to_num2(s):
  # 여기에 코드를 작성해주세요.
  dict={'I' : 1,
        'V' : 5,
        'X' : 10,
        'L' : 50,
        'C' : 100,
        'D' : 500,
        'M' : 1000}

  a = 0
  for i in s :
    a += 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

딕셔너리에 로마자와 그에 지정된 숫자를 저장한다.
for 을 사용해서 a에 반환할 값을 누적하여 저장한다.
코드 길이는 비슷하지만 '딕셔너리'와 'for' 을 사용하여 중복된 코드를 제거하고
이후에 로마자가 추가됐을 때 수정할 부분이 더 적게된다.

profile
Make my day !

0개의 댓글

관련 채용 정보