https://leetcode.com/problems/integer-to-roman/
정수가 주어질 때 로마 표기로 변환해서 반환하기
숫자 범위는 1~3999이다. (즉, MMMM~ 꼴은 input이 될 수 없다.)
각 자릿수 string으로 처리해서 4랑 9, 그 외로 나눠서 처리
public class Solution {
public string IntToRoman(int num) {
string answer = "";
string[] subtractionDigit = new string[3] {"I", "X", "C"};
string[] subtractionFive = new string[3] {"V", "L", "D"};
string[] subtractionTen = new string[3] {"X", "C", "M"};
Dictionary<int, string> intToRomanDict = new Dictionary<int, string>();
intToRomanDict.Add(1, "I");
intToRomanDict.Add(5, "V");
intToRomanDict.Add(10, "X");
intToRomanDict.Add(50, "L");
intToRomanDict.Add(100, "C");
intToRomanDict.Add(500, "D");
intToRomanDict.Add(1000, "M");
string number = num.ToString();
// M 먼저 처리 (1000의 자릿수)
if (number.Length == 4)
{
for (int i = 0; i < int.Parse(number[0].ToString()); i++)
{
answer += "M";
}
number = number.Substring(1, number.Length - 1);
}
// 100, 10, 1 단위 처리
for (int i = 0; i < number.Length; i++)
{
// 현재 자릿 수에 해당 되는 숫자
int currentDigit = int.Parse(number[i].ToString());
// 자릿수 정보
int digit = number.Length - i - 1;
switch (currentDigit)
{
case 4:
answer += subtractionDigit[digit];
answer += subtractionFive[digit];
break;
case 9:
answer += subtractionDigit[digit];
answer += subtractionTen[digit];
break;
default:
if (currentDigit >= 5)
{
answer += intToRomanDict[5 * (int)Math.Pow(10, digit)];
currentDigit -= 5;
}
if (currentDigit != 0)
{
for (int j = 0; j < currentDigit; j++)
{
answer += intToRomanDict[1 * (int)Math.Pow(10, digit)];
}
}
break;
}
}
return answer;
}
}