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문으로 했다가, 나중에 수정했음