Programming/Algorithm
로마 숫자 변환 - Javascript
쌩우
2019. 7. 13. 07:09
문자열로 받은 로마숫자를 실생활에 사용 중인 아라비아 숫자로 변환하는 알고리즘.
/* * Ex: * translateRomanNumeral("LX") // 60 * 큰 로마숫자 앞에 작은 로마 숫자가 나타나면, 그 때에 가산 표기가 적용된다. * 큰 것의 앞에는 오직 하나의 작은 로마 숫자가 나타나는 것을 가정할 수 있다. * * Ex: * translateRomanNumeral("IV") // 4 * 유효하지 않은 입력값에는 null을 return해준다. */ var DIGIT_VALUES = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 }; var translateRomanNumeral = function(romanNumeral) { // TODO: Implement me! if (typeof romanNumeral !== 'string') { //문자가 아닌 input이라면 유효하지 않음 return null; } else { if (romanNumeral === '') { //문자이지만 빈 문자열 input return 0; } else { //이 외에는 로마문자열이라고 일단 가정 result = 0; //문자열을 순회하면서 //현재 위치 기준으로 바로 뒤의 문자를 봤을 때, //1) DIGIT_VALUES key 배열 기준, 자신 바로 뒤의 key가 있는 경우면 if(string[i+1] === Object.keys(DIGIT_VALUES)[Object.keys(DIGIT_VALUES).indexOf(string[i]) + 1]) //result -= (DIGIT_VALUES[string[i]]) //2) DIGIT_VALUES key 배열 기준, 바로 뒤의 key가 아니면 result += (DIGIT_VALUES[string[i]]) let i = 0; while (i < romanNumeral.length) { if (DIGIT_VALUES[romanNumeral[i]] < DIGIT_VALUES[romanNumeral[i + 1]]) { result -= DIGIT_VALUES[romanNumeral[i]]; i++; } else { result += DIGIT_VALUES[romanNumeral[i]]; i++; } } return result; } } };