Roman to Integer (LeetCode)


問題の説明

  • I、V、X、L、C、D、M、ローマ文字ごとに整数値
  • があります.
  • などの文字を加算するか、整数値の大きい文字に小数文字を加算し、両者を加算して
  • しかし、4および9を表す場合、
  • は、IV、IXなどのプリアンブルおよび2つの整数値を使用して置き換えることができる.
  • 入力文字列sは、整数値
  • を返す.
  • 参考資料
  • せいげんじょうけん

  • 文字列sの長さは1または15以下
  • である.
  • 文字列sの整数値範囲は1以上3999以下
  • である.

    に答える

    var romanToInt = function(s) {
        const alphabet = {
            I: 1,
            V: 5,
            X: 10,
            L: 50,
            C: 100,
            D: 500,
            M: 1000
        }
        const sArr = s.split(''); // 문자 배열
        const nArr = []; // 숫자 배열
        let alphabetSum = 0; // 해당 문자의 정수값을 저장할 변수
        sArr.map((value,idx)=>{
            // 현재 문자와 다음 문자가 다를때
            if(sArr[idx] !== sArr[idx+1]){
                // 현재 문자의 숫자값이 다음문자의 숫자값보다 작을때
                if(alphabet[sArr[idx]] < alphabet[sArr[idx+1]]){
                    alphabetSum += alphabet[value];
                    nArr.push(alphabetSum * -1);
                    alphabetSum = 0;
                }
                // 현재 문자의 숫자값이 다음문자의 숫자값보다 크거나 문자열의 마지막 문자일때
                else{
                    alphabetSum += alphabet[value];
                    nArr.push(alphabetSum);
                    alphabetSum = 0;
                }
            }
            // 현재 문자와 다음 문자가 같을때
            else
                alphabetSum += alphabet[value];
        });
        return nArr.reduce((sum,cur)=> sum + cur,0);
    };

    チェックポイント

  • 文字列インデックスの範囲外で要素を検索すると、定義されていない
  • が返されます.
  • reduce法を用いて整数
  • を累計計算する.