등 최고의 IT기업 인터뷰에서 자주 묻는 문제다. 구글, 아마존, TCS, 그리고 액센츄어, 문제 해결을 통해 면접자의 논리적 능력, 비판적 사고, 문제 해결 능력을 확인하고자 합니다. 그래서 이번 섹션에서는 이에 대해 논의해보겠습니다. Java에서 정수를 로마자로 변환하는 방법 다양한 접근 방식과 논리를 가지고 있습니다. 또한 이를 위한 Java 프로그램도 만들겠습니다.
로마 숫자
로마 숫자는 숫자의 상징적 표현입니다. 이들은 일반적으로 시계 모드, 음악 이론 등에 사용됩니다. 일곱 로마 숫자를 나타내는 데 사용되는 문자. 다음 표는 로마 숫자와 해당 십진수 값을 나타냅니다.
성격 | 로마 숫자 |
---|---|
나 | 1 |
안에 | 5 |
엑스 | 10 |
엘 | 오십 |
씨 | 100 |
디 | 500 |
중 | 1000 |
로마 숫자에는 다음과 같은 속성이 있습니다.
일반적으로 일부 특수한 경우(왼쪽 문자가 오른쪽 문자보다 작은 경우)를 제외하고는 왼쪽에서 오른쪽으로 가장 높은 것에서 가장 낮은 것으로 기록됩니다. 예를 들어 로마 숫자에서 IV는 4와 같습니다. IIII로 쓸 수 없습니다.
그러한 경우에는 오른쪽 문자 값에서 왼쪽 문자 값을 뺍니다. 예를 들어 IV는 5-1=4가 됩니다. 마찬가지로 IX는 10-1=9가 됩니다.
다음과 같은 경우를 고려하십시오.
- 로마 숫자 I는 V 또는 X 앞에 놓일 수 있으며 1 빼기를 나타냅니다. 예를 들어 IV(5-1) = 4이고 9는 IX(10-1) = 9입니다.
- 로마 숫자 X는 10 빼기를 나타내는 L 또는 C 앞에 올 수 있습니다. 예를 들어 XL(50-10) = 40, XC(100-10) = 90입니다.
- D 또는 M 앞에 붙은 로마 숫자 C는 100을 의미합니다. 예를 들어 CD(500-100) = 400, CM(1000-100) = 900입니다.
접근하다
정수를 로마 숫자로 변환하는 방법은 간단합니다. 먼저 로마 숫자 값을 저장하기 위한 배열과 해당 문자를 저장하기 위한 배열을 만듭니다. StringBuilder 클래스의 인스턴스를 만듭니다. 이제 정수를 로마 숫자와 비교하고 다음을 수행하십시오.
- 입력 숫자가 >= 가장 높은 로마 숫자인 경우 문자열 작성기에 추가하고 입력 숫자에서 해당 값을 줄입니다.
- 입력번호가 다음과 같은 경우
StringBuilder는 해당 로마 숫자입니다.
위의 단계를 예를 통해 이해해 보겠습니다.
예
36을 로마 숫자로 변환해야 한다고 가정해 보겠습니다. 다음과 같이 정수를 로마자 값과 비교합니다.
1000>36 = 예, 다음 로마 숫자로 확인하세요.
900>36 = 예, 다음 로마 숫자로 확인하세요.
500>36 = 예, 다음 로마 숫자를 확인하세요.
400>36 = 예, 다음 로마 숫자로 확인하세요.
100>36 = 예, 다음 로마 숫자로 확인하세요.
선주문 순회
90>36 = 예, 다음 로마 숫자로 확인하세요.
50>36 = 예, 다음 로마 숫자로 확인하세요.
40>36 = 예, 다음 로마 숫자로 확인하세요.
10<36, add corresponding literal 'x' to result, result='X,' n='36-10=26</p'>
10<26, add corresponding literal 'x' to result, result='XX,' n='26-10=16</p'>
10<16, add corresponding literal 'x' to result, result='XXX,' n='16-10=6</p'>
10>6, 다음 로마 숫자로 확인, 결과 =XXX
9>6, 다음 로마 숫자로 확인, 결과 =XXX
5<6, add corresponding literal 'v' to result, result='XXXV,' n='6-5=1</p'>
5>1, 다음 로마 숫자로 확인, 결과 =XXXV
4>1, 다음 로마 숫자로 확인, 결과 =XXXV
1==1, 해당 리터럴 'I'를 결과에 추가, 결과 =XXXVI, N = 1-1=0
결과 = XXXVI
정수를 로마 숫자로 변환하는 Java 프로그램
IntegerToRoaman.java
public class IntegerToRoman { public static void intToRoman(int num) { System.out.println('Integer: ' + num); int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[] romanLetters = {'M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'}; StringBuilder roman = new StringBuilder(); for(int i=0;i= values[i]) { num = num - values[i]; roman.append(romanLetters[i]); } } System.out.println('Corresponding Roman Numerals is: ' + roman.toString()); } public static void main(String args[]) { intToRoman(125); intToRoman(252); intToRoman(1000); intToRoman(1010); } }
산출:
로마 숫자를 인쇄하는 또 다른 방법은 자릿값 배열 4개를 만드는 것입니다. 예를 들어 단위, 십, 백, 천 등이 있습니다. 그 후 자릿값을 계산하여 로마 숫자로 변환합니다.
IntegerToRoman.java
public class IntegerToRoman { //method to convert integer to roman //function that converts integer to roman public static String intToRoman(int number) { //creating array of place values String[] thousands = {'', 'M', 'MM', 'MMM'}; String[] hundreds = {'', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'}; String[] tens = {'', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'}; String[] units = {'', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'}; return thousands[number / 1000] + hundreds[(number % 1000) / 100] + tens[(number % 100) / 10] + units[number % 10]; } public static void main(String args[]) { //creating an array of integers to be convert into roman int[] numbers = {13, 21, 38, 50, 190, 141, 117, 120, 125, 138, 149, 6, 712, 181, 197, 918, 199, 1100, 1101, 1248, 1253}; for (int number : numbers) { System.out.printf('%4d -> %8s ', number, intToRoman(number)); } } }
산출:
참고: 위의 Java 프로그램은 3999까지 잘 작동합니다.
주어진 범위에서 로마 숫자 인쇄
DecimaltoRoman.java
import java.util.LinkedHashMap; import java.util.Map; public class DecimaltoRoman { public static String RomanNumerals(int num) { LinkedHashMap romanNumerals = new LinkedHashMap(); //storing roman letters and corresponding decimal values in HashMap romanNumerals.put('M', 1000); romanNumerals.put('CM', 900); romanNumerals.put('D', 500); romanNumerals.put('CD', 400); romanNumerals.put('C', 100); romanNumerals.put('XC', 90); romanNumerals.put('L', 50); romanNumerals.put('XL', 40); romanNumerals.put('X', 10); romanNumerals.put('IX', 9); romanNumerals.put('V', 5); romanNumerals.put('IV', 4); rssomanNumerals.put('I', 1); //variable for string the result String result = ''; //loop iterate over Map for(Map.Entry entry : romanNumerals.entrySet()) { int matches = num/entry.getValue(); result = result+repeat(entry.getKey(), matches); num = num % entry.getValue(); } return result; } public static String repeat(String s, int n) { if(s == null) { return null; } final StringBuilder sb = new StringBuilder(); for(int i = 0; i <n; 1 200 i++) { sb.append(s); } converts into string return sb.tostring(); driver code public static void main(string args[]) prints roman numerals from to for (int i="1;i" '+romannumerals(i)); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/coding-problems/50/convert-integer-roman-numerals-java-4.webp" alt="Convert Integer to Roman Numerals in Java"> <p>Besides the above methods, there are various ways to convert integer to roman such as Using TreeMap, using switch case, etc. </p> <hr></n;>6,>16,>26,>36,>