[리트코드] 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 풀이를 조금만 더 생각했으면 나도 떠올릴 수 있는 간단한 식이었는데 고민을 깊게 하지 않고, 정규식을 택한 것 같아 아쉽다.