문자열 하나를 입력받아, 정수 하나를 반환하는 함수를 구현한다.
문자열은 I,V,X,L,C,D,M 중 알파벳의 조합으로 이루어져 있다.
정수의 값은 아래의 표에 따라, 문자열에 존재하는 알파벳의 값을 각각 모두 더한 값이다.
Symbol | Value |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
단, 예외적으로 아래의 규칙이 존재한다.
- I는 V와 결합하여 4가 되고, X와 결합하여 9가 된다. ex) IV = 4, IX = 9
- X는 L과 결합하여 40이 되고, C와 결합하여 90이 된다. ex) XL = 40, XC = 90
- C는 D와 결합하여 400이 되고, M과 결합하여 900이 된다. ex) CD = 400, CM = 900
package _13RomanToInteger;
import java.util.HashMap;
import java.util.Map;
public class RomanToInteger
{
public int romanToInt(String s)
{
HashMap<Character, Integer> map_c = new HashMap<Character, Integer>();
HashMap<String, Integer> map_s = new HashMap<String, Integer>();
int sum = 0;
char temp[] = new char[2];
map_c.put('I', 1);
map_c.put('V', 5);
map_c.put('X', 10);
map_c.put('L', 50);
map_c.put('C', 100);
map_c.put('D', 500);
map_c.put('M', 1000);
map_s.put("IV", 4);
map_s.put("IX", 9);
map_s.put("XL", 40);
map_s.put("XC", 90);
map_s.put("CD", 400);
map_s.put("CM", 900);
if(s.length() == 1)
sum += map_c.get(s.charAt(0));
else
{
for(int i= 0; i < s.length(); ++i)
{
if(i < s.length()-1) // (1) 예외처리
{
temp[0] = s.charAt(i);
temp[1] = s.charAt(i+1);
}
String temp_new = new String(temp);
if(map_s.containsKey(temp_new))
{
sum+= map_s.get(temp_new);
i++;
temp[0] = ' ';
temp[1] = ' ';
}
else
sum += map_c.get((s.charAt(i)));
}
}
return sum;
}
}