21.3.8
알고리즘 5일차
문제 : 로마 숫자를 정수로 반환
-
오전 내내 문제가 안 풀린 이유 : 문제를 반대로 읽었다.(정수를 로마 숫자로 변환하는 줄 알고...)
-
문제의 키 : 4,9,6,11 등 5,10에 +1, -1을 한 값이다. 이에 따라 위치가 왼쪽이냐 오른쪽이냐에 따라 조건을 주어 +- 1을 해주는 방식
예를 들어 IX를 s값에 입력했다고 가정해보자.
내 코드 :
def roman_to_num(s):
dic = {"M":1000, "D": 500, "C": 100,"L":50, "X":10, "V": 5, "I":1}
result = 0
# 알아야할 정수값
for i in range(len(s)-1) :
# 왜? : 문자열이니까 이걸 분해하기 위해서는 이렇게 함.
num = dic[s[i]]
#문자열 1
nextNum = dic[s[i+1]]
#문자열 2
if (num>=nextNum) :
result += num
# 이 경우는 11처럼 XI인 경우
else :
result -= num
# 이 경우는 9처럼 IX인 경우
# 여기서 나오는 값이 -1
result += dic[s[len(s)-1]]
# 실제 결과는 X를 더해줘야 하므로
# 어떻게 해도 5, 10, 100은 +가 되고 1에 대해서는 5, 10에서 왼쪽에 있을 때는 -1, 오른쪽에 있을 때는 +1이 된다.
return (result)
굉장히 까다롭고 어려운 로직. 꼭 복습 필요.(주말 이용)
Author And Source
이 문제에 관하여(21.3.8), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sinichy7/21.3.8알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)