로마 숫자를 정수로 또는 그 반대로 변환
소개
이 게시물은 제가 LeetCode에서 해결한 두 가지 문제에서 영감을 받았습니다. 그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다.
LeetCode에서 문제 설명을 보려면 강조 표시된 제목을 클릭하십시오.
로마 숫자를 정수로
문자열이 주어지고 길이는 1에서 15까지입니다. 문자만 포함합니다
'I', 'V', 'X', 'L', 'C', 'D', 'M'
; 문자열이 [1, 3999]
범위의 유효한 로마 숫자임을 보장합니다. 따라서 작업은 로마 숫자를 나타내는 주어진 문자열을 해당 정수로 변환하는 것입니다. 또한 다음 진술을 고려하십시오.I
는 V
(5)와 X
(10) 앞에 배치되어 4와 9를 만들 수 있습니다. X
는 L
(50)과 C
(100) 앞에 배치되어 40과 90을 만들 수 있습니다. C
는 D
(500) 및 M
(1000) 앞에 배치되어 400 및 900을 만들 수 있습니다. 솔루션 논의
이 문제를 해결하기 위해 사용한 접근 방식은 문자열을 반복하고 문제 설명에서 위에서 설명한 빼기 원칙을 충족하는 조건을 실행하여 최종 합계에 해당하는 결과를 반환하는 것이었습니다.
조건은 다음과 같습니다. 현재 문자가 이전 문자보다 크면 결과에서 이전 문자 값을 빼고, 그렇지 않으면 이전 문자 값을 결과로 증가시킵니다.
예를 들어 문자열
s = 'XIV'
를 고려하면 'X'
변수가 10
로 초기화되기 때문에 값이 previousChar
인 첫 번째 문자0
가 조건을 충족하고 result
는 여전히 0
로 남아 있습니다. ) .값이
'I'
인 두 번째 문자1
는 1
가 현재 previousChar
인 10
보다 크지 않으면 조건을 충족하지 않습니다. 따라서 result
는 10
만큼 증가하고 previousChar
는 1
로 업데이트됩니다.마지막으로 값이
'V'
인 세 번째 문자5
는 previousChar
보다 크기 때문에 조건을 충족합니다. 따라서 result
에서 1
를 빼고 previousChar
를 5로 업데이트합니다.이 코드는
result = 9
로 루프를 끝내고 마지막으로 previousChar
의 값을 result
로 증가시킵니다. 따라서 최종 result
는 14
가 됩니다.해결책
다음은 Python 솔루션의 예입니다.
numbersDict = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
def romanToInt(s):
result = 0
previousChar = 0
for char in s:
if numbersDict[char] > previousChar:
result -= previousChar
else:
result += previousChar
previousChar = numbersDict[char]
result += previousChar
return result
정수 대 로마 숫자
1 <= num <= 3999
범위의 정수가 주어지고 이를 로마 숫자로 변환하는 작업입니다.솔루션 논의
이전 문제의 솔루션에서와 같이 먼저
dictionary
를 생성하여 정수와 각각의 로마 숫자를 매핑합니다. 그러나 단일 문자 로마 숫자만 매핑한 이전 챌린지와 달리 이 경우에는 정수 4와 9와 그 후속 40, 90, 400 및 900인 1000까지 매핑해야 합니다.필요한 검사를 실행할 때 각 반복과 관련이 있기 때문에 내림차순으로 튜플 배열을 주문한 이 경우에 대해 언급하는 것도 중요합니다.
따라서 첫 번째 단계 후에 변환을 수행하는 함수를 만듭니다. 이 아이디어는 전체 문자열을 반복할 때까지 카운터에 값을 증가시키는 대신 주어진 숫자에서 값을 빼고 각각의 로마 숫자를
result
라는 문자열 유형 변수에 연결한다는 점을 제외하면 이전 챌린지와 유사합니다. .해결책
다음은 Python 솔루션의 예입니다.
numbersDict = [
(1000, 'M'),
(900, 'CM'),
(500, 'D'),
(400, 'CD'),
(100, 'C'),
(90, 'XC'),
(50, 'L'),
(40, 'XL'),
(10, 'X'),
(9, 'IX'),
(5, 'V'),
(4, 'IV'),
(1, 'I')
]
def intToRoman(num):
remaining = num
result = ''
for integerValue, romanNumeral in numbersDict:
while remaining >= integerValue:
result += romanNumeral
remaining -= integerValue
return result
그런 다음 JavaScript의 동일한 솔루션:
const numbersDict = [
[1000, 'M'],
[900, 'CM'],
[500, 'D'],
[400, 'CD'],
[100, 'C'],
[90, 'XC'],
[50, 'L'],
[40, 'XL'],
[10, 'X'],
[9, 'IX'],
[5, 'V'],
[4, 'IV'],
[1, 'I']
];
const intToRoman = (num) => {
let remaining = num;
let result = '';
for (let [integerValue, romanNumeral] of numbersDict) {
while (remaining >= integerValue) {
result += romanNumeral;
remaining -= integerValue;
}
}
return result;
};
Reference
이 문제에 관하여(로마 숫자를 정수로 또는 그 반대로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alvesjessica/converting-roman-numerals-to-integers-and-vice-versa-2g0m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)