Roman to Integer

문제

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

로마숫자를 정수로 바꾸는 문제

풀이

const romanToInt = s => {
    const roman = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000};
    if ( s.length === 1 ) {
        return roman[s]
    }
    let result = 0;
    const special = { 'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900 }
    for ( let i = 0; i < s.length-1; i++ ) {
        if ( special[s[i]+s[i+1]] ) {
            result += special[s[i]+s[i+1]];
            s = s.replace(s[i]+s[i+1], '');
            i = -1
        }
    }
    for ( let j = 0; j < s.length; j++ ) {
        result += roman[s[j]]
    }
    return result
};

문제는 어렵지 않은데 예외처리를 일일이 해줘야하는게 귀찮았음.

먼저 각각 문자가 뜻하는 숫자를 roman에 담고, 특별한 경우를 따로 special에 담는다.

우선 길이가 1개일 때 roman에서 매칭되는 값을 리턴해주고

길이가 2개 이상인 경우에는 먼저 special에 해당하는 문자가 있는지 찾아서 result에 더해준 뒤에 문자열에서 삭제해주는 포문을 하나 돌리고

남은 값들을 roman에서 매칭시켜 result에 더해주고 리턴하면 끝

객체로 묶는 생각을 바로 못해서 일일이 if문으로 했다가, 나중에 수정했음


+ Recent posts