로마 숫자로 표기된 자연수 에 대하여, 다음과같이 아라비아 숫자로 변환해 보세요.
CCCLXIX, LXXX, XXIX, CLV, XIV, CDXCII, CCCXLVIII, CCCI, CDLXIX, CDXCIX
-> 369, 80, 29, 155, 14, 492, 348, 301, 469, 499
가산표기법 : 기호의 값을 합산하는 방식 ex) III = 1+1+1 = 3
감산표기법 : 큰 수 앞에 작은 수를 놓으면 큰 수에서 작은 수를 빼는 방식 ex) IV = 5-1 = 4
로마 숫자는 가산표기법, 감산표기법 둘 다 사용
로마 숫자 표기법 함수로 구현
def getValueOf(symbol):
if symbol == 'M': return 1000
elif symbol == 'D': return 500
elif symbol == 'C': return 100
elif symbol == 'L': return 50
elif symbol == 'X': return 10
elif symbol == 'V': return 5
elif symbol == 'I': return 1
roman = 'MDCLXVI'
for i in range(len(roman)):
print(roman[i], ':', getValueOf(roman[i]))
로마 숫자 표기법 딕셔너리로 구현
romanDict = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1}
roman = 'MDCLXVI'
for i in range(len(roman)):
print(roman[i], ':', romanDict[roman[i]])
딕셔너리를 사용하면 훨씬 간단하게 구현할 수 있다.
로마 숫자를 아라비아 숫자로 바꾸기
def toArabicNumber(roman):
arabic = 0
for i in range(len(roman)):
value = romanDict[roman[i]] # 로마 숫자에서 아라비아 숫자로 바꾼 값을 변수에 담는다.
if i < len(roman)-1 and value < romanDict[roman[i+1]]: # i가 마지막 글자인지 아닌지 확인하고, 마지막 글자가 아니면 다음 글자를 확인해 감산표기법을 사용해야 하는지 확인한다.
arabic -= value # 감산표기법을 사용해야 하면 -를 해준다.
else:
arabic += value # 나머지는 다 더해준다.
return arabic
romans = ['CCCLXIX', 'LXXX', 'XXIX', 'CLV', 'XIV', 'CDXCII', 'CCCXLVIII', 'CCCI', 'CDLXIX', 'CDXCIX']
arabics = []
for roman in romans:
arabics.append(toArabicNumber(roman))
print(arabics)
->
[369, 80, 29, 155, 14, 492, 348, 301, 469, 499]
아라비아의 숫자로 표기된 자연수 에 대하여, 다음과 같이 로마 숫자로 표기해 보세요.
369, 80, 29, 155, 14, 492, 348, 301, 469, 499
-> CCCLXIX, LXXX, XXIX, CLV, XIV, CDXCII, CCCXLVIII, CCCI, CDLXIX, CDXCIX
아라비아 숫자를 로마 숫자로 바꾸기
romanDict = {1:'I', 4:'IV', 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]: # keyValues의 값들을 하나씩 돌면서 n의 값을 확인하고 크면 반복문 실행
str += romanDict[keyValues[i]] # keyValues값에 해당되는 romanDict의 value값을 str에 더한다.
n -= keyValues[i] # 인자로 받은 n의 값을 keyValues값으로 뺀다. 그리고 0이 될 때 까지 반복
return str
Q = [369, 80, 29, 155, 14, 492, 348, 301, 469, 499]
for i in Q:
print(toRomanNumber(i), end=' ')
->
CCCLXIX LXXX XXIX CLV XIV CDXCII CCCXLVIII CCCI CDLXIX CDXCIX