logo

로마 숫자를 정수로 변환

로마 형식의 문자열이 주어지면 이 주어진 로마 문자열을 정수로 변환하는 작업이 수행됩니다.

로마 숫자 다음 기호를 기반으로 합니다.



상징



자바 부울 문자열

1

안에

5



엑스

글꼴 크기 라텍스

10

오십

자바의 멀티스레딩

100

500

멍청한 평균

1000

예:

입력: 9
산출: 9
설명: IX는 9를 나타내는 로마 기호입니다.

입력: 특대
산출: 40
설명: XL는 40을 나타내는 로마 기호입니다.

입력: MCMIV
산출: 1904년
설명: M은 천, CM은 900, IV는 4입니다.

로마숫자를 정수로 연습하는 것이 좋습니다. 시도해 보세요!

접근하다: 로마 숫자의 숫자는 내림차순(예: M이 먼저, D가 뒤따르는 등)으로 작성된 이러한 기호의 문자열입니다. 그러나 몇 가지 특정한 경우에는 4개의 문자가 연속해서 반복되는 것을 방지하려면(예: IIII 또는 XXXX) 빼기 표기법 다음과 같이 자주 사용됩니다.

  • 이전에 배치 안에 또는 엑스 1이 적다는 뜻이므로 4는 IV (5보다 1이 작은 것)이고 9는 IX(10보다 1이 작은 것)입니다.
  • 엑스 이전에 배치 또는 10이 적다는 뜻이므로 40은 특대 (10은 50보다 작음) 그리고 90은 XC (100보다 작은 10).
  • 이전에 배치 또는 100이 적다는 뜻이므로 400은 CD (100은 500보다 적음) 그리고 900은 센티미터 (천보다 백이 적습니다).

로마 숫자를 정수로 변환하는 알고리즘:

평균 대 평균
  • 로마 숫자 문자열을 로마 기호(문자)로 분할합니다.
  • 로마 숫자의 각 기호를 그것이 나타내는 값으로 변환합니다.
  • 인덱스 0부터 시작하여 기호를 하나씩 가져옵니다.
    • 기호의 현재 값이 다음 기호의 값보다 크거나 같으면 이 값을 누계에 추가합니다.
    • 그렇지 않으면 누계에 다음 기호의 값을 더하여 이 값을 뺍니다.

위의 알고리즘을 구현하면 다음과 같습니다.

C++
// Program to convert Roman // Numerals to Numbers #include  using namespace std; // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(string& str) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < str.length()) {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1;  } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1;  나++;  } } else { res = res + s1;  } } 해상도를 반환; } // 드라이버 코드 int main() { // 제공된 입력을 고려하면 유효한 문자열입니다. str = 'MCMIV';  시합<< 'Integer form of Roman Numeral is '  << romanToDecimal(str) << endl;  return 0; }>
// Program to convert Roman // Numerals to Numbers #include  #include  // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(char str[]) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < strlen(str); i++)  {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < strlen(str))  {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1;  } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1;  나++;  } } else { res = res + s1;  } } 해상도를 반환; } // 드라이버 코드 int main() { // 제공된 입력이 유효한 것으로 간주됩니다. char str[10] = 'MCMIV';  printf('정수 형식의 로마 숫자는 %d',romanToDecimal(str));  0을 반환합니다. }>
자바
// Program to convert Roman // Numerals to Numbers import java.util.*; public class RomanToNumber {  // This function returns  // value of a Roman symbol  int value(char r)  {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1;  }  // Finds decimal value of a  // given roman numeral  int romanToDecimal(String str)  {  // Initialize result  int res = 0;  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str.charAt(i));  // Getting value of symbol s[i+1]  if (i + 1 < str.length()) {  int s2 = value(str.charAt(i + 1));  // Comparing both values  if (s1>= s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. res = res + s1;  } else { // 현재 심볼의 값은 // 다음 심볼보다 작습니다. res = res + s2 - s1;  나++;  } } else { res = res + s1;  } } 해상도를 반환;  } // 드라이버 코드 public static void main(String args[]) { RomanToNumber ob = new RomanToNumber();  // 주어진 입력이 유효한 것으로 간주 String str = 'MCMIV';  System.out.println('정수형 로마 숫자' + ' is ' + ob.romanToDecimal(str));  } }>
파이썬
# Python program to convert Roman Numerals # to Numbers # This function returns value of each Roman symbol def value(r): if (r == 'I'): return 1 if (r == 'V'): return 5 if (r == 'X'): return 10 if (r == 'L'): return 50 if (r == 'C'): return 100 if (r == 'D'): return 500 if (r == 'M'): return 1000 return -1 def romanToDecimal(str): res = 0 i = 0 while (i < len(str)): # Getting value of symbol s[i] s1 = value(str[i]) if (i + 1 < len(str)): # Getting value of symbol s[i + 1] s2 = value(str[i + 1]) # Comparing both values if (s1>= s2): # 현재 심볼의 값이 다음 심볼보다 크거나 # 같습니다 res = res + s1 i = i + 1 else: # 현재 심볼의 값이 다음 심볼보다 크거나 # 같습니다 res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # 드라이버 코드 print('정수 형식의 로마 숫자는'), print(romanToDecimal('MCMIV'))>'>씨#= s2) { // 현재 심볼의 값이 // 다음 심볼보다 크거나 같습니다. res = res + s1;  } else { res = res + s2 - s1;  나++; // 현재 기호의 값은 // 다음 기호보다 작습니다. } } else { res = res + s1;  나++;  } } 해상도를 반환;  } // 드라이버 코드 public static void Main(string[] args) { GFG ob = new GFG();  // 주어진 입력이 유효한 문자열임을 고려 str = 'MCMIV';  Console.WriteLine('정수형 로마 숫자' + '는 ' + ob.romanToDecimal(str));  } } // 이 코드는 Shrikant13이 제공한 것입니다.>
자바스크립트
>
PHP
 // Program to convert Roman // Numerals to Numbers // This function returns  // value of a Roman symbol function value($r) { if ($r == 'I') return 1; if ($r == 'V') return 5; if ($r == 'X') return 10; if ($r == 'L') return 50; if ($r == 'C') return 100; if ($r == 'D') return 500; if ($r == 'M') return 1000; return -1; } // Returns decimal value // of roman numeral function romanToDecimal(&$str) { // Initialize result $res = 0; // Traverse given input for ($i = 0; $i < strlen($str); $i++) { // Getting value of // symbol s[i] $s1 = value($str[$i]); if ($i+1 < strlen($str)) { // Getting value of // symbol s[i+1] $s2 = value($str[$i + 1]); // Comparing both values if ($s1>= $s2) { // 현재 심볼의 값은 // 다음 심볼보다 크거나 같습니다. $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // 현재 기호의 값은 // 다음 기호보다 작습니다. } } else { $res = $res + $s1; $i++; } } $res를 반환합니다. } // 드라이버 코드 // 입력 고려 // 주어진 것이 유효함 $str ='MCMIV'; echo '로마 숫자의 정수 형식은 ', romanToDecimal($str), '
'; // 이 코드는 ajit가 제공한 것입니다. ?>>

산출
Integer form of Roman Numeral is 1904>

복잡성 분석:

  • 시간 복잡도: O(n), 여기서 n은 문자열의 길이입니다.
    문자열을 한 번만 순회하면 됩니다.
  • 보조 공간: O(1), 추가 공간이 필요하지 않습니다.