문제

제출한 코드

class Solution {
    public int romanToInt(String s) {
        // 1. s 쪼개기
        // 2. 왼쪽에서 부터 큰 숫자다
        // 3. 큰 숫자가 오긴 오는데, 예외를 조심한다
        char[] romanChars = s.toCharArray();

        int result = 0;

        for (int i = 0; i < romanChars.length; i++) {
            try {
                char currentChar = romanChars[i];
                if (!hasExceptionalCaseChar(currentChar)) {
                    result += getDefaultNumberForRoman(currentChar);
                } else {
                    if (i == romanChars.length - 1) {
                        result += getDefaultNumberForRoman(currentChar);
                    } else {
                        String needToBeCheckedString = currentChar + String.valueOf(romanChars[i+1]);
                        if (!isExceptionalCaseString(needToBeCheckedString)) {
                            result += getDefaultNumberForRoman(currentChar);
                        } else {
                            result += getExceptionalNumberForRoman(needToBeCheckedString);
                            i++;
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    private boolean hasExceptionalCaseChar(char character) {
        return character == 'I' || character == 'X' || character == 'C';
    }

    private int getDefaultNumberForRoman(char character) throws Exception {
        if (character == 'M') {
            return 1000;
        } else if (character == 'D') {
            return 500;
        } else if (character == 'C') {
            return 100;
        } else if (character == 'L') {
            return 50;
        } else if (character == 'X') {
            return 10;
        } else if (character == 'V') {
            return 5;
        } else if (character == 'I') {
            return 1;
        }
        throw new Exception();
    }

    private boolean isExceptionalCaseString(String chars) {
        return chars.equals("IV")
                || chars.equals("IX")
                || chars.equals("XL")
                || chars.equals("XC")
                || chars.equals("CD")
                || chars.equals("CM");
    }

    private int getExceptionalNumberForRoman(String chars) throws Exception {
        if (chars.equals("IV")) {
            return 4;
        } else if (chars.equals("IX")) {
            return 9;
        } else if (chars.equals("XL")) {
            return 40;
        } else if (chars.equals("XC")) {
            return 90;
        } else if (chars.equals("CD")) {
            return 400;
        } else if (chars.equals("CM")) {
            return 900;
        }
        throw new Exception();
    }
}

잘한점

개선 할 점