romanNumerals.js

Codewars 알고리즘 풀이


Problem

  • Create a function taking a positive integer as its parameter and returning a string containing the Roman Numeral representation of that integer.
    • 양의 정수를 매개변수로 사용한다.
    • 해당 정수를 로마 숫자 표기법 문자열로 반환한다.
  • Remember that there can’t be more than 3 identical symbols in a row.
    • 한 행에 3개 이상의 동일한 기호를 사용할 수 없다.


For example:

1990 => MCMXC

1000: M

900: CM

90: XC



Solution 01

function romanNumerals(n) {
  const roman = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
  const decimal = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
  let result = '';
  
  decimal.map((i, index) => {
    while (n >= i) {
      result += roman[index];
      n -= i;
    }
  });
  return result;
}

romanNumerals(1);     // I
romanNumerals(2);     // II
romanNumerals(3);     // III
romanNumerals(4);     // IV
romanNumerals(5);     // V
romanNumerals(6);     // VI
romanNumerals(7);     // VII
romanNumerals(8);     // VIII
romanNumerals(9);     // IX
romanNumerals(10);    // X
romanNumerals(11);    // XI
romanNumerals(12);    // XII
romanNumerals(1990);  // MCMXC


Solution 02

function romanNumerals(n) {
  const roman = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
  };
  let result = '';
  
  while (n > 0) {
    for (i in roman) {
      if (roman[i] <= n) {
        result += i;
        n -= roman[i];
        break;
      }
    }
  }
  return result;
}

romanNumerals(1);     // I
romanNumerals(2);     // II
romanNumerals(3);     // III
romanNumerals(4);     // IV
romanNumerals(5);     // V
romanNumerals(6);     // VI
romanNumerals(7);     // VII
romanNumerals(8);     // VIII
romanNumerals(9);     // IX
romanNumerals(10);    // X
romanNumerals(11);    // XI
romanNumerals(12);    // XII
romanNumerals(1990);  // MCMXC