자바의 로마 숫자

Sheeraz Gul 2023년10월12일
자바의 로마 숫자

이 튜토리얼은 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
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook