/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
let sum = 0;
for(let i = 0; i < s.length; i++){
if(s[i] === "I"){
if(s[i + 1] === "V"){
sum += 4;
i++;
continue;
}
if(s[i + 1] === "X"){
sum += 9;
i++;
continue;
}
sum += 1;
continue;
}
if(s[i] === "X"){
if(s[i + 1] === "L"){
sum += 40;
i++;
continue;
}
if(s[i + 1] === "C"){
sum += 90;
i++;
continue;
}
sum += 10;
continue;
}
if(s[i] === "C"){
if(s[i + 1] === "D"){
sum += 400;
i++;
continue;
}
if(s[i + 1] === "M"){
sum += 900;
i++;
continue;
}
sum += 100;
continue;
}
if(s[i] === "V"){
sum += 5;
continue;
}
if(s[i] === "L"){
sum += 50;
continue;
}
if(s[i] === "D"){
sum += 500;
continue;
}
if(s[i] === "M"){
sum += 1000;
continue;
}
}
return sum;
};
문제에 주어진 조건을 그대로 활용해서 조건문 처리를 해줬다.
가장 직관적인 방법이라고 생각된다.
var romanToInt = function(s) {
const sym = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
let result = 0;
for (let i = 0; i < s.length; i++) {
const cur = sym[s[i]];
const next = sym[s[i + 1]];
if (cur < next) {
result += next - cur;
i++;
} else {
result += cur;
}
}
return result;
};
Hash Table을 사용하신 분들이 많았다.
사실 문제 분류가 Array/String으로 되어있어서 가능한 사용하지 않는 걸로 풀었던건데,
역시 빠른게 장땡인 것인가..ㅠㅠ
필자와 크게 다른 점은 예외 처리를 하는 부분에 있다.
필자는 모든 조건을 다 나눠서 적어줬지만, 이 분께서는 result += next - cur을 통해 문제의 규칙을 적용하신 것으로 보인다.
필자의 풀이는 if문이 너무 많아, 어떻게 하면 줄일 수 있을까 고민했었는데,
이런 식으로 접근하면 간단하게 해결되는 것이었다.