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
'IT > 알고리즘' 카테고리의 다른 글
[python/알고리즘] 계란 낙하 실험 문제 (0) | 2021.05.15 |
---|---|
[python/알고리즘] 스무고개를 넘어보자 (0) | 2021.05.14 |
[python/알고리즘] 콜라츠의 추측 (2) | 2021.05.12 |
[python/알고리즘] 날짜 계산하기 (2) | 2021.05.11 |
[python/알고리즘] 최소공배수 구하기 (0) | 2021.05.10 |
댓글
최근에 올라온 글
TAG
- MongoDB
- numpy
- db
- 인공지능
- 자료구조
- cnn
- 부스트코스
- 알고리즘
- VGGNet
- SQL
- 머신러닝
- Python
- Min()
- Pandas
- Scikit
- 파이썬
- Max()
- slqd
- 프로그래머스
- Project
- OpenCV
- Programmers
- SQLD
- 딥러닝
- Ai
- sklearn
- 경사하강법
- algorithm
- 주니온
- 기계학습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
250x250