본문 바로가기
개발/알고리즘

[LeetCode] 12. Integer to Roman (javascript)

by 자몬다 2021. 5. 31.
728x90

주어진 숫자를 로마자로 변환하는 문제다.

1~3999의 숫자만 변환할 수 있으면 된다.

 

1의 자리, 10의 자리, 100의 자리, 1000의 자리에서 사용되는 문자열의 종류를 정의해주고,

0~9의 숫자 표현법을 패턴화하여 더해주도록 했다.

 

 

/**
 * @param {number} num
 * @return {string}
 */
var intToRoman = function(num) {
    // num은 1~3999이다.
    const arr = num.toString().split('').reverse();
    let result = '';
    
    for (let i = 0; i < arr.length; i++){
        result = makeRoman(parseInt(arr[i]), i) + result;
    }
    return result;
};

const makeRoman = (num, index) => {
    // 0 1 2  3   4  5 6  7   8    9
    // - I II III IV V VI VII VIII IX
    // - X XX XXX XL L LX LXX LXXX XC
    // 패턴... 
    // IVX, XLC, CDM, M
    if(index > 2) {
        let thousands = '';
        for(let i = 0; i < num; i++){
            thousands += 'M'
        }
        return thousands;
    }
    
    const lowStr = ['I', 'X', 'C'][index];
    const fiveStr = ['V', 'L', 'D'][index];
    const highStr = ['X', 'C', 'M'][index];

    const pattern = {
        0: '',
        1: lowStr,
        2: `${lowStr}${lowStr}`,
        3: `${lowStr}${lowStr}${lowStr}`,
        4: `${lowStr}${fiveStr}`,
        5: `${fiveStr}`,
        6: `${fiveStr}${lowStr}`,
        7: `${fiveStr}${lowStr}${lowStr}`,
        8: `${fiveStr}${lowStr}${lowStr}${lowStr}`,
        9: `${lowStr}${highStr}`
    }
    return pattern[num];
}

 

https://leetcode.com/problems/integer-to-roman/

댓글0