[LeetCode | Javascript] Roman to Integer

박기영·2023년 9월 25일

LeetCode

목록 보기
39/41

solution

/**
 * @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;
};

문제에 주어진 조건을 그대로 활용해서 조건문 처리를 해줬다.
가장 직관적인 방법이라고 생각된다.

다른 분의 solution

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문이 너무 많아, 어떻게 하면 줄일 수 있을까 고민했었는데,
이런 식으로 접근하면 간단하게 해결되는 것이었다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글