[LeetCode 13] Roman to Integer

Feb 25, 2020


[LeetCode 13] Roman to Integer

문제 요약

로마 숫자를 표현하는 문자열이 주어졌을 때, 해당 로마 숫자 문자열을 정수로 변환하는 문제.

풀이

문제의 설명대로 특정 로마 숫자 앞에 올 수 있는 다른 로마 숫자는 정해져 있다. 이에 대한 예외처리만 제대로 실수없이 추가한다면 그리 어렵지 않은 구현 문제이다.
로마 숫자 문자열의 개수가 N이라고 한다면, O(N)의 시간복잡도를 갖는다.

코드

class Solution {
    public int romanToInt(String s) {
        int ret = 0;
        for (int i = 0; i < s.length();) {
            if (s.charAt(i) == 'I') {
                if (i + 1 < s.length()) {
                    if (s.charAt(i + 1) == 'V') {
                        ret += 4;
                        i += 2;
                    }
                    else if (s.charAt(i + 1) == 'X') {
                        ret += 9;
                        i += 2;
                    }
                    else {
                        ret++;
                        i++;
                    }
                }
                else {
                    ret++;
                    i++;
                }
            }
            else if (s.charAt(i) == 'V') {
                ret += 5;
                i++;
            }
            else if (s.charAt(i) == 'X') {
                if (i + 1 < s.length()) {
                    if (s.charAt(i + 1) == 'L') {
                        ret += 40;
                        i += 2;
                    }
                    else if (s.charAt(i + 1) == 'C') {
                        ret += 90;
                        i += 2;
                    }
                    else {
                        ret += 10;
                        i++;
                    }
                }
                else {
                    ret += 10;
                    i++;
                }
            }
            else if (s.charAt(i) == 'L') {
                ret += 50;
                i++;
            }
            else if (s.charAt(i) == 'C') {
                if (i + 1 < s.length()) {
                    if (s.charAt(i + 1) == 'D') {
                        ret += 400;
                        i += 2;
                    }
                    else if (s.charAt(i + 1) == 'M') {
                        ret += 900;
                        i += 2;
                    }
                    else {
                        ret += 100;
                        i++;
                    }
                }
                else {
                    ret += 100;
                    i++;
                }
            }
            else if (s.charAt(i) == 'D') {
                ret += 500;
                i++;
            }
            else if (s.charAt(i) == 'M') {
                ret += 1000;
                i++;
            }
        }
        return ret;
    }
}