Leetcode/Top Interview 150

[Array/String][Medium] 12. Integer to Roman

자전거통학 2024. 5. 1. 06:19

 

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

Q. 주어진 정수를 로마 문자로 변경하라. 

 

 

Solution. 

 정수를 로마 문자를 바꾸려면 우선, 4, 9, 40, 90 등에 대한 특수 문자에 대한 처리를 해야 한다.  

 

 또한 자리수 고려를 잘 해야 한다. 

 

 딱히 알고리즘이라고 할 것은 없고, 로직 전개대로 코드를 작성한다. 

 

더보기
public string IntToRoman(int num) 
{
    Dictionary<int, string> dictStr = new Dictionary<int, string>();

    dictStr.Add(1, "I");
    dictStr.Add(5, "V");
    dictStr.Add(10, "X");
    dictStr.Add(50, "L");
    dictStr.Add(100, "C");
    dictStr.Add(500, "D");
    dictStr.Add(1000, "M");

    dictStr.Add(4, "IV");
    dictStr.Add(9, "IX");
    dictStr.Add(40, "XL");
    dictStr.Add(90, "XC");
    dictStr.Add(400, "CD");
    dictStr.Add(900, "CM");

    string ret = "";

    int pos = 1;
    while(num > 0)
    {
        string strCur = "";
        int digit = num%10;
        int val = digit * pos;

        if(dictStr.ContainsKey(val))
        {
            strCur = dictStr[val];
        }
        else 
        {
            string mul;
            if(val < 10)
            {
                mul = "I";
                if(val >= 5)
                {
                    strCur += "V";
                    digit %= 5;
                }
            }
            else if(val < 100)
            {
                mul = "X";
                if(val >= 50)
                {
                    strCur += "L";
                    digit %= 5;
                }
            }
            else if(val < 1000)
            {
                mul = "C";
                if(val >= 500)
                {
                    strCur += "D";
                    digit %= 5;
                }
            }
            else mul = "M";

            for(int j = 0; j < digit; ++j)
                strCur += mul;
        }
        ret = strCur + ret;
        num /= 10;
        pos *= 10;
    }

    return ret;
}

 

적절한 결과.