[리트코드] 13. Roman to Integer




13. Roman to Integer

리트코드 문제 바로가기

나의 풀이

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function (s) {
  const hash = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000,
  };

  const exception = {
    IV: hash["V"] - hash["I"],
    IX: hash["X"] - hash["I"],
    XL: hash["L"] - hash["X"],
    XC: hash["C"] - hash["X"],
    CD: hash["D"] - hash["C"],
    CM: hash["M"] - hash["C"],
  };
  let sum = 0;
  for (let key in exception) {
    let regex = new RegExp(`${key}`, "g");
    let match = s.match(regex);
    if (match) {
      sum += exception[key] * match.length;
      s = s.replace(key, "");
    }
  }

  for (let i = 0; i < s.length; i++) {
    sum += hash[s[i]];
  }
  return sum;
};



best 풀이

var romanToInt = function (s) {
  const roman = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000,
  };
  let sum = 0;
  for (let i = 0; i < s.length; i++) {
    if (roman[s[i]] < roman[s[i + 1]]) {
      sum -= roman[s[i]];
    } else {
      sum += roman[s[i]];
    }
  }
  return sum;
};

best 풀이를 보고나니 내가 과하게 돌아서 푼 것을 깨달았다.😂
그래도 오랜만에 정규식을 적용해봐서 나름 신선했다.
best 풀이를 조금만 더 생각했으면 나도 떠올릴 수 있는 간단한 식이었는데 고민을 깊게 하지 않고, 정규식을 택한 것 같아 아쉽다.