HOWTO · Java

자바의 로마 숫자

이 튜토리얼은 Java에서 정수를 로마 숫자로 변환하는 방법을 보여줍니다.

이 튜토리얼은 Java에서 정수를 로마 숫자로 변환하는 방법을 보여줍니다.

자바의 로마 숫자

Java에서 작업하는 동안 정수를 로마 숫자로 변환하는 것이 자주 필요합니다. 대부분의 경우 TOP IT 회사와의 인터뷰에서 이 질문을 받습니다.

로마 숫자는 숫자를 나타내는 문자입니다. 우리는 보통 시계나 음악 이론에서 이러한 숫자를 찾을 수 있습니다. 로마자로 숫자를 나타내는 데 사용되는 문자는 총 7개입니다. 아래 표를 참조하십시오.

로마 인 숫자
1
IV 4
V 5
IX 9
엑스 10
특대 40
50
XC 90
100
CD 400
500
센티미터 900
1000

로마 숫자는 보통 왼쪽에서 오른쪽으로, 높은 곳에서 낮은 곳으로 씁니다. 위의 표는 로마 숫자를 세 번 이상 사용할 수 없음을 보여줍니다. 예를 들어 IV와 같이 4를 작성하지만 IIII는 작성하지 않습니다.

이제 Java에서 정수를 로마 숫자로 변환하는 방법을 만들어 보겠습니다. 아래 단계를 따르십시오.

  • 먼저 두 개의 배열을 만들어야 합니다. 하나는 로마 숫자용이고 다른 하나는 정수용입니다.
  • 그런 다음 문자열 작성기 클래스의 인스턴스를 만듭니다.
  • 다음 단계는 정수를 로마 숫자와 비교하는 것입니다.
  • 정수가 >=이면 가장 높은 로마 숫자이므로 문자열 빌더 인스턴스에 추가하고 입력 숫자에서 해당 값을 줄여야 합니다.
  • 정수가 <이면 가장 높은 로마 숫자, 가장 높은 로마 숫자를 확인하고 입력 숫자가 0이 될 때까지 프로세스를 반복해야 합니다.
  • 최종 문자열 빌더는 변환된 로마 숫자입니다.

이제 위의 단계를 기반으로 Java 프로그램을 구현해 보겠습니다.

package delftstack;

public class Example {
  public static void IntegerToRoman(int DemoInteger) {
    System.out.println("The Integer Number is : " + DemoInteger);
    int[] IntegerValues = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] RomanValues = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    StringBuilder RomanNumber = new StringBuilder();
    for (int x = 0; x < IntegerValues.length; x++) {
      while (DemoInteger >= IntegerValues[x]) {
        DemoInteger = DemoInteger - IntegerValues[x];
        RomanNumber.append(RomanValues[x]);
      }
    }
    System.out.println("The Roman Numeral for given number is: " + RomanNumber.toString());
  }
  public static void main(String args[]) {
    IntegerToRoman(121);
    IntegerToRoman(280);
    IntegerToRoman(999);
    IntegerToRoman(1000);
    IntegerToRoman(1100);
  }
}

위의 코드는 주어진 정수를 로마 숫자로 변환합니다. 출력을 참조하십시오.

The Integer Number is : 121
The Roman Numeral for given number is: CXXI
The Integer Number is : 280
The Roman Numeral for given number is: CCLXXX
The Integer Number is : 999
The Roman Numeral for given number is: CMXCIX
The Integer Number is : 1000
The Roman Numeral for given number is: M
The Integer Number is : 1100
The Roman Numeral for given number is: MC

정수를 로마 숫자로 변환하는 유일한 방법은 아닙니다. 두 개가 아닌 네 개의 배열을 만들 수도 있습니다. 이 네 개의 배열은 단위, 십, 백, 천 형태의 로마 숫자용입니다. 그런 다음 이러한 배열을 사용하여 동일한 문자열 작성기 메서드를 사용하여 주어진 숫자에 대한 로마 숫자를 생성할 수 있습니다. 예를 참조하세요.

package delftstack;

public class Example {
  public static String IntegerToRoman(int DemoIntger) {
    String[] ThousandsRoman = {"", "M", "MM", "MMM"};
    String[] HundredsRoman = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String[] TensRoman = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String[] UnitsRoman = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    return ThousandsRoman[DemoIntger / 1000] + HundredsRoman[(DemoIntger % 1000) / 100]
        + TensRoman[(DemoIntger % 100) / 10] + UnitsRoman[DemoIntger % 10];
  }
  public static void main(String args[]) {
    int[] Integers = {
        17, 23, 48, 53, 181, 191, 147, 150, 105, 128, 199, 98, 212, 2181, 3118, 1100, 1111};
    for (int DemoInteger : Integers) {
      System.out.printf("Integer %4d -> Roman %8s\n", DemoInteger, IntegerToRoman(DemoInteger));
    }
  }
}

위의 코드는 주어진 정수 배열을 하나씩 로마 숫자로 변환합니다. 출력 참조:

Integer   17 -> Roman     XVII
Integer   23 -> Roman    XXIII
Integer   48 -> Roman   XLVIII
Integer   53 -> Roman     LIII
Integer  181 -> Roman   CLXXXI
Integer  191 -> Roman     CXCI
Integer  147 -> Roman   CXLVII
Integer  150 -> Roman       CL
Integer  105 -> Roman       CV
Integer  128 -> Roman  CXXVIII
Integer  199 -> Roman    CXCIX
Integer   98 -> Roman   XCVIII
Integer  212 -> Roman    CCXII
Integer 2181 -> Roman MMCLXXXI
Integer 3118 -> Roman MMMCXVIII
Integer 1100 -> Roman       MC
Integer 1111 -> Roman     MCXI

코드에서 배열을 사용하지 않으려면 맵을 사용할 수도 있습니다. 여기서 각 정수의 값을 숫자와 함께 입력한 다음 정수를 로마 숫자로 변환하는 데 사용합니다. 예를 참조하십시오.

package delftstack;

import java.util.LinkedHashMap;
import java.util.Map;
public class Example {
  public static String ConvertedRomanNumerals(int DemoInteger) {
    LinkedHashMap<String, Integer> RomanNumeralsMap = new LinkedHashMap<String, Integer>();

    RomanNumeralsMap.put("M", 1000);
    RomanNumeralsMap.put("CM", 900);
    RomanNumeralsMap.put("D", 500);
    RomanNumeralsMap.put("CD", 400);
    RomanNumeralsMap.put("C", 100);
    RomanNumeralsMap.put("XC", 90);
    RomanNumeralsMap.put("L", 50);
    RomanNumeralsMap.put("XL", 40);
    RomanNumeralsMap.put("X", 10);
    RomanNumeralsMap.put("IX", 9);
    RomanNumeralsMap.put("V", 5);
    RomanNumeralsMap.put("IV", 4);
    RomanNumeralsMap.put("I", 1);

    String RomanResult = "";

    for (Map.Entry<String, Integer> MapEntry : RomanNumeralsMap.entrySet()) {
      int MatchedInteger = DemoInteger / MapEntry.getValue();
      RomanResult = RomanResult + RepeatProcess(MapEntry.getKey(), MatchedInteger);
      DemoInteger = DemoInteger % MapEntry.getValue();
    }
    return RomanResult;
  }
  public static String RepeatProcess(String Roman, int DemoInteger) {
    if (Roman == null) {
      return null;
    }
    final StringBuilder DemoRomanBuilder = new StringBuilder();
    for (int i = 0; i < DemoInteger; i++) {
      DemoRomanBuilder.append(Roman);
    }
    return DemoRomanBuilder.toString();
  }

  public static void main(String args[]) {
    for (int x = 1; x < 31; x++) {
      System.out.println("Integer = " + x + " -> Roman = " + ConvertedRomanNumerals(x));
    }
  }
}

위의 코드는 Map을 사용하여 정수를 로마 숫자로 변환합니다. 이 코드는 1에서 30까지의 정수를 로마 숫자로 변환합니다. 출력 참조:

Integer = 1 -> Roman = I
Integer = 2 -> Roman = II
Integer = 3 -> Roman = III
Integer = 4 -> Roman = IV
Integer = 5 -> Roman = V
Integer = 6 -> Roman = VI
Integer = 7 -> Roman = VII
Integer = 8 -> Roman = VIII
Integer = 9 -> Roman = IX
Integer = 10 -> Roman = X
Integer = 11 -> Roman = XI
Integer = 12 -> Roman = XII
Integer = 13 -> Roman = XIII
Integer = 14 -> Roman = XIV
Integer = 15 -> Roman = XV
Integer = 16 -> Roman = XVI
Integer = 17 -> Roman = XVII
Integer = 18 -> Roman = XVIII
Integer = 19 -> Roman = XIX
Integer = 20 -> Roman = XX
Integer = 21 -> Roman = XXI
Integer = 22 -> Roman = XXII
Integer = 23 -> Roman = XXIII
Integer = 24 -> Roman = XXIV
Integer = 25 -> Roman = XXV
Integer = 26 -> Roman = XXVI
Integer = 27 -> Roman = XXVII
Integer = 28 -> Roman = XXVIII
Integer = 29 -> Roman = XXIX