728x90

 

로마 숫자 표기법


로마 숫자는 위와 같이 표기하며 python dict 형태로 표현하면 아래와 같다.

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

 


 

Q. 로마 문자 'MDCLXVI' 를 아라비아 숫자로 변경해보자.

A.

  
  # 감산표기법(IV=4, IX=9, XL=13, XC=19,,,) 추가 및 함수로 변경
  def romatoArabic(roman):
      arabic = 0
      for i in range(len(roman)):
          val = romanDict[roman[i]]
          # 총 길이의 마지막을 제외하고 and 현재 roman[i]와 뒤의 roman[i+1]을 비교하여 감산
          if (i<len(roman)-1) and val < romanDict[roman[i+1]]:
              arabic -= val
          else:
              arabic += val
      return arabic

  res_roma = romatoArabic('MDCLXVI')
  print(res_roma)
  

-> 감산표기법은 뒤 문자의 숫자가 더 클 경우 (뒤 문자 값 - 앞 문자 값)으로 계산한다.

 

 

Q. 반대로 아라비아 숫자를 로마 문자로 변경해보자.

A.

  
  romanDict2 = { 1:'I', 4:'IX', 5:'V', 9:'IX', 10:'X',40:'XL', 50:'L', 90:'XC', 100:'C',400:'CD', 500:'D', 900:'CM', 1000:'M'}
  keyValues = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]

  def toRomanNumber(n):
      str = ""
      for i in range(len(keyValues)):
          while n >= keyValues[i] :
              str += romanDict2[keyValues[i]]
              n -= keyValues[i]
      return str

  # 결과 확인
  numbers = [369, 80, 29, 155, 14, 492, 348, 301, 469, 499]
  for i in numbers :
      print(toRomanNumber(i), end=', ')
      
  # 결과값 : CCCLXIX, LXXX, XXIX, CLV, XIX, CDXCII, CCCXLVIII, CCCI, CDLXIX, CDXCIX, 
    

-> 1. keyValues의 0번지부터 n의 값과 비교한다.

    2. keyValues의 값이 n보다 작거나 같으면 keyValues의 값에 해당하는 로마 문자를 추가한다.

   -> keyValues의 값은 romanDict2의 키 값으로 romanDict2[key]는 key에 해당하는 value(값)를 반환한다.

    3. 로마 문자를 추가한 후 그만큼 n의 값을 차감한다.

   

 

 

출처 : Youtube 주니온TV 아무거나연구소의 코린아, 코딩하자! with 파이썬
728x90
댓글
250x250
최근에 올라온 글
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Total
Today
Yesterday