decodeRomanNumerals.js
Codewars 알고리즘 풀이
Problem
- Create a function that takes a Roman numeral as its argument and returns its value as a numeric decimal integer.
- 로마 숫자(Roman numeral)를 10진수로 반환한다.
For example:
1990 => MCMXC
1000: M
900: CM
90: XC
Solution 01
function decodeRomanNumerals(roman) {
const rom = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
let arr = roman.split('');
let result = 0;
for (let i = 0; i < arr.length; i++) {
if (rom[arr[i]] < rom[arr[i + 1]]) {
result += rom[arr[i + 1]] - rom[arr[i]];
i++;
} else {
result += rom[arr[i]];
}
}
return result;
}
decodeRomanNumerals('I'); // 1
decodeRomanNumerals('II'); // 2
decodeRomanNumerals('III'); // 3
decodeRomanNumerals('IV'); // 4
decodeRomanNumerals('V'); // 5
decodeRomanNumerals('VI'); // 6
decodeRomanNumerals('VII'); // 7
decodeRomanNumerals('VIII'); // 8
decodeRomanNumerals('IX'); // 9
decodeRomanNumerals('X'); // 10
decodeRomanNumerals('XI'); // 11
decodeRomanNumerals('XII'); // 12
decodeRomanNumerals('MCMXC'); // 1990
Solution 02
function decodeRomanNumerals(roman) {
const rom = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
return roman.split('').map(i => rom[i]).reduce((result, i, index, array) => {
if (i < array[index + 1]) {
return result - i;
}
return result + i;
}, 0);
}
decodeRomanNumerals('I'); // 1
decodeRomanNumerals('II'); // 2
decodeRomanNumerals('III'); // 3
decodeRomanNumerals('IV'); // 4
decodeRomanNumerals('V'); // 5
decodeRomanNumerals('VI'); // 6
decodeRomanNumerals('VII'); // 7
decodeRomanNumerals('VIII'); // 8
decodeRomanNumerals('IX'); // 9
decodeRomanNumerals('X'); // 10
decodeRomanNumerals('XI'); // 11
decodeRomanNumerals('XII'); // 12
decodeRomanNumerals('MCMXC'); // 1990
Solution 03
function decodeRomanNumerals(roman) {
const rom = { M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1 };
return roman.split('').map(i => rom[i]).reduce((result, i, index, array) => result + (i < array[index + 1] ? -i : i), 0);
}
decodeRomanNumerals('I'); // 1
decodeRomanNumerals('II'); // 2
decodeRomanNumerals('III'); // 3
decodeRomanNumerals('IV'); // 4
decodeRomanNumerals('V'); // 5
decodeRomanNumerals('VI'); // 6
decodeRomanNumerals('VII'); // 7
decodeRomanNumerals('VIII'); // 8
decodeRomanNumerals('IX'); // 9
decodeRomanNumerals('X'); // 10
decodeRomanNumerals('XI'); // 11
decodeRomanNumerals('XII'); // 12
decodeRomanNumerals('MCMXC'); // 1990