문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
로마 숫자들은 7개의 다른 기호 I, V, X, L, C, D와 M으로 나타있다.
| 기호 | 값 |
|---|---|
| I | 1 |
| V | 5 |
| X | 10 |
| L | 50 |
| C | 100 |
| D | 500 |
| M | 1000 |
예를 들어, 2는 로마 숫자에서 II로 쓰고, 1 두 개를 더하면 된다. 12는 XII로 쓰고, X + II가 된다. 숫자 27은 XXVII이고, XX + V + II이다.
로마 숫자는 보통 큰 쪽에서 작은 쪽으로 왼쪽에서 오른쪽으로 쓴다. 그러나 숫자 4는 IIII가 아니다. 대신에 숫자 4는 IV로 작성한다. 왜냐하면 5에서 1을 빼는 것으로 4를 만든다. 같은 원리로 숫자 9도 IX로 나타낸다. 빼기가 사용되는 경우는 6가지가 있다.
주어진 로마 숫자를 정수로 변환해라.
#1
Input: s = "III"
Output: 3
Explanation: III = 3
#2
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V = 5, III = 3
#3
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90, IV = 4
Map을 사용하면 좀 더 빠른 처리 시간과 효율있게 문제를 풀 수 있지만, if문을 사용해서 노가다로 풀었다.
각 해당되는 문자가 나왔을때 알맞은 수를 더하고, 만약 해당 문자 앞에 빼기가 되는 수가 온다면 빼기를 한 수를 더해주면 문제를 해결할 수 있다.
따로 코드를 설명하지 않고 바로 All Code로 넘어가겠다.
class Solution {
public int romanToInt(String s) {
int result = 0;
String[] sArr = s.split("");
for(int i = 0; i < sArr.length; i++){
if(i == 0){
if(sArr[i].equals("I")) result += 1;
else if(sArr[i].equals("V")) result += 5;
else if(sArr[i].equals("X")) result += 10;
else if(sArr[i].equals("L")) result += 50;
else if(sArr[i].equals("C")) result += 100;
else if(sArr[i].equals("D")) result += 500;
else if(sArr[i].equals("M")) result += 1000;
}else{
if(sArr[i].equals("I")){
result += 1;
}else if(sArr[i].equals("V")){
if(sArr[i - 1].equals("I")) result += 3;
else result += 5;
}else if(sArr[i].equals("X")){
if(sArr[i - 1].equals("I")) result += 8;
else result += 10;
}else if(sArr[i].equals("L")){
if(sArr[i - 1].equals("X")) result += 30;
else result += 50;
}else if(sArr[i].equals("C")){
if(sArr[i - 1].equals("X")) result += 80;
else result += 100;
}else if(sArr[i].equals("D")){
if(sArr[i - 1].equals("C")) result += 300;
else result += 500;
}else if(sArr[i].equals("M")){
if(sArr[i - 1].equals("C")) result += 800;
else result += 1000;
}
}
}
return result;
}
}