[leetcode] roman to

13. 로마에서 정수로
로마 숫자 I, V, X, L, C, 디, 엠 7개의 기호로 표시됩니다.
: 하나,
V: 5,
엑스: 10,
: 50,
: 100,
: 500,
: 1000,
예를 들어, 로마 숫자 II는 단지 두 개의 추가된 1로 구성됩니다.
XII. 간단히 X + II는 12입니다.

로마 숫자는 보통 왼쪽에서 오른쪽으로 오름차순으로 씁니다.
그러나 숫자 4는 IIII가 아닙니다. 대신 숫자 4는 IV이고 1이 5보다 앞에 오므로 뺄셈은 4가 됩니다.
숫자 9 IX에도 동일한 원칙이 적용됩니다. 빼기가 사용되는 경우는 6가지입니다.

IV(5)와 X(10) 앞에 놓으면 4와 9를 만들 수 있습니다.
XL(50) 및 (100) 앞에 C40 및 90을 배치하여 생성할 수 있습니다.
CD(500) 및 M(1000) 전에 400 및 900을 수행할 수 있습니다.
주어진 로마 숫자를 정수로 변환합니다.

예 1:

입력: s = “III”
출구: 3
설명: III = 3.
예 2:

입력: s = “LVIII”
에디션: 58
설명: L=50, V=5, III=3.
예 3:

입력: s=”MCMXCIV”
에디션: 1994
설명: M=1000, CM=900, XC=90 및 IV=4.

먼저 제한 사항을 살펴보겠습니다.

빼기 규칙
1. I가 IV이면 IX는 4.9입니다.
2. X가 XL 또는 XC이면 40 또는 90입니다.
3. C는 400이고 CD와 CM은 900입니다.

코드 작성

   function romanToInt(s) {
        roman = {
          //객체를 만들어서, 로마문자에 대응하는 값을 넣어준다.
          I: 1,
          V: 5,
          X: 10,
          L: 50,
          C: 100,
          D: 500,
          M: 1000,
        };
        value = 0; //value를 0으로 초기화
        for (let i = 0; i < s.length; i += 1) {
          //s의 길이만큼 반복
          if (roman(s(i)) < roman(s(i + 1))) {
            //roman(s(i))란, s의 i번째 문자를 키로 가지는 객체의 값을 의미한다.
            //s(i+1)이란, s의 i+1번째 문자를 의미한다. 예를 들어, s가 "MCMXCIV"라면, s(0)은 "M", s(1)은 "C"이다.
            value = value - roman(s(i)); //value에 roman(s(i))를 빼준다.
          } else {
            value = value + roman(s(i)); //value에 roman(s(i))를 더해준다.
          }
        }
        return value;
      }
      let s = "VV";
      console.log(romanToInt(s));
      
      //출력값 10

1. 로마자를 붙여넣을 수 있는 오브젝트를 만들어 각 글자를 붙여넣었습니다.

2. 반복문으로 s 길이의 절반을 반복한 후,

3. roman(s(i)) (첫 번째 문자열)과 roman(s(i+1)) (첫 번째 문자열 + 1)을 비교합니다.

예를 들어 s=”MCDL”인 경우

로마자(s(i)) === M

로마자(s(i+1)) === C .

M은 1000이고 C는 100이므로 roman(s(i)) < roman(s(i+1)) 조건을 만족하지 않습니다.

값은 M(1000)이 됩니다. C(100) 및 D(500) 조건이 설정되고,

500-100은 400이므로 값 = 1000 + 400입니다.

마지막으로 D(500)과 L(50)을 비교하면 조건이 충족되지 않는다.

50이 반환되고 최종적으로 1450이 값 = 1000 + 400 + 50으로 출력됩니다.